首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过php脚本将文件匿名上传到google驱动器

通过php脚本将文件匿名上传到google驱动器
EN

Stack Overflow用户
提问于 2014-03-07 14:26:14
回答 2查看 2.9K关注 0票数 1

嗨,我正在用下面的php代码匿名上传文件到谷歌驱动器.

index.php文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <?php
session_start();
$url_array = explode('?', 'http://'.$_SERVER ['HTTP_HOST'].$_SERVER['REQUEST_URI']);
$url = $url_array[0];
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';
$client = new Google_Client();
$client->setClientId('Client ID');
$client->setClientSecret('Secret key');
$client->setRedirectUri($url);
$client->setScopes(array('https://www.googleapis.com/auth/drive'));
if (isset($_GET['code'])) {
    $_SESSION['accessToken'] = $client->authenticate($_GET['code']);
    header('location:'.$url);exit;
} elseif (!isset($_SESSION['accessToken'])) {
    $client->authenticate();
}
$files= array();
$dir = dir('files');
while ($file = $dir->read()) {
    if ($file != '.' && $file != '..') {
        $files[] = $file;
    }
}
$dir->close();
if (!empty($_POST)) {
    $client->setAccessToken($_SESSION['accessToken']);
    $service = new Google_DriveService($client);

    $file = new Google_DriveFile();
    foreach ($files as $file_name) {
        $file_path = 'files/'.$file_name;
        $mime_type = "text/plain";
        $file->setTitle($file_name);
        $file->setDescription('This is a '.$mime_type.' document');
        $file->setMimeType($mime_type);
        $createdFile = $service->files->insert(
            $file,
            array(
                'data' => file_get_contents($file_path),
                'mimeType' => $mime_type
            )
        );


        // Uncomment the following line to print the File ID
     //print 'File ID: %s' % $createdFile->getId();

    }

    header('location:'.$url);exit;
}
include 'index.phtml';
?>

index.phtml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="UTF-8">
        <title>Google Drive Example App</title>
    </head>
    <body>
        <ul>
        <?php foreach ($files as $file) { ?>
            <li><?php echo $file; ?></li>
        <?php } ?>
        </ul>
        <form method="post" action="<?php echo $url; ?>">
            <input type="submit" value="Send" name="submit">
        </form>
    </body>
</html>

现在的问题是,每次我在我的浏览器上运行index.php时,它都要求我授权,但我想做的是让任何随机的用户不管有没有谷歌驱动器帐户,都可以通过index.php将文件上传到我的谷歌驱动器帐户。那似乎行不通..。我做错了什么,任何帮助都会很感激。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-08 03:13:05

尽管有这些评论,但可以通过允许匿名用户通过应用程序上传到Google帐户。

只有一次,您需要身份验证作为自己,然后授权您的应用程序访问您的驱动器帐户使用脱机访问。这将创建一个刷新令牌。将该刷新令牌存储在服务器的某个位置。您可以通过编写一些只执行一次的代码来做到这一点,或者可以使用Oauth2游乐场。

然后,匿名用户可以将文件上传到应用程序,然后应用程序可以使用存储的刷新令牌将该文件上传到Google,以请求访问令牌。

另一种(可能更好)方法是使用服务帐户。

票数 0
EN

Stack Overflow用户

发布于 2014-10-21 12:02:43

在@keaner的帖子链接中找到的,有可能

https://developers.google.com/drive/web/service-accounts

关于服务vs.regular帐户,来自文档

“由于无法访问服务帐户的Google Drive web用户界面,因此无法为这类帐户购买额外的Google驱动器存储空间。因此,您可能更喜欢使用常规帐户而不是服务帐户。”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22261907

复制
相关文章
控制器操作
一.控制器操作 我们首先复习一下基本的控制器定义和方法执行方式。 第一步:控制器默认创建在当前模块下的 Controller 目录下; 第二步:按照指定的命名规则:控制器名(首字母大写)+Controller.class.php; 第三步:控制器里的方法必须是 public 公共的; //控制器 class UserController extends Controller { public function index() { //index()方法在URL访问时可以忽略 } } URL 访问:http://localhost/demo39/User/index/
PM吃瓜
2019/08/13
6470
控制器操作【2】
三.跳转和重定向 ThinkPHP 在操作数据库时,需要跳转和重定向页面。ThinkPHP 提供了一组方法来解决了这个问题。 //成功和失败的跳转 class UserController extends Controller { public function index() { $flag = true; if ($flag) { //会跳转到:http://localhost/demo39/User/all $this->success('新增成功!', '../User/all'); } else { //会跳转到本页的上一页 $this->error('新增失败!'); } } } PS:success()方法和 error()方法,第一个参数是提示信息、第二个跳转的地址、第三个跳转时间。默认情况下 success()方法是 1 秒,error()方法是 3 秒。
PM吃瓜
2019/08/13
5720
控制器操作【3】
五.请求类型 ThinkPHP 提供了一组常量来判断当前请求是否是 GET、POST 等。通过判断请求处理不同的业务逻辑。 常量 含义 IS_GET 判断是否 GET 提交请求 IS_POST 判断是否 POST 提交请求 IS_PUT 判断是否 PUT 提交请求 IS_DELTE 判断是否 DELETE 提交请求 IS_AJAX 判断是否 AJAX 提交请求 //判断是否GET请求 if (IS_GET) { echo '是GET请求'; } else { echo '不是GET请求'; }
PM吃瓜
2019/08/13
5680
SDRAM控制器操作时序
IDLE 状态到WRITE 状态: ​ 1) 在IDLE 状态需要先给ACT 命令激活某一行,此时处于Row Active 状态; ​ 2) 在Row Active 状态之后,给Write 命令则会进入WRITE 状态; ​ 3) 在WRITE 状态后,再给一次Write 命令,就可以继续写入数据。 WRITE 状态到IDLE 状态: ​ 1) 在WRITE 状态给PRE 命令,则SDRAM 将跳出WRITE 状态进入Precharge状态; ​ 2) 在Precharge 状态后,就会自动进入IDLE 状态了。
全栈程序员站长
2022/09/16
7090
SDRAM控制器操作时序
分区操作后索引的状态
导读:DDL操作是否会导致索引失效的原则上是看是否引起数据发生变化,如果分区的数据发生了改变,则索引需要失效才能保证结果的准确性,如果数据没有发生变化,则索引的状态不会变为UNUSABLE。
数据和云
2020/02/27
8260
Structured Streaming的任意状态操作
很多使用案例需要比聚合更高级的状态操作。例如,在很多案例中,你必须跟踪来自于事件数据流的会话操作。为了处理这种会话机制,必须存储任意类型的数据作为状态,同时每次触发使用数据流事件对状态做任意的状态操作。从spark2.2开始,可以使用mapGroupsWithState和更强大操作flatMapGroupsWithState。两个操作都允许你对分组的datasets使用自定义代码去更新自定义状态。
Spark学习技巧
2019/07/22
1.3K0
git版本控制器的相关操作
git status 查看仓库状态 git diff <filename> 查看为提交的修改 git log 查看提交的日志 git log --pretty=oneline 单行显示
java攻城狮
2020/10/10
5490
git版本控制器的相关操作
Spring中如何操作JDBC
本篇文章介绍一下在Spring中如何使用JDBC,事实上,在Spring中使用JDBC和传统的JDBC或者一些JDBC框架,如:DBUtils的使用没有什么区别,所以Spring中使用JDBC是非常简单的。
wangweijun
2020/02/14
3490
.Net中如何操作IIS
Net中实际上已经为我们在这方面做得很好了。FCL中提供了不少的类来帮助我们完成这项工作,让我们的开发工作变非常简单和快乐。编程控制IIS实际上很简单,和ASP一样,.Net中需要使用ADSI来操作IIS,但是此时我们不再需要GetObject这个东东了,因为.Net为我们提供了更加强大功能的新东东。 System.DirectoryServices命名空间中包括了些强大的东东--DirectoryEntry,DirectoryEntries,它们为我们提供了访问活动目录的强大功能,在这些类允许我们操作II
脑洞的蜂蜜
2018/02/02
1.9K0
JQuery中DOM操作示例代码
Jquery的DOM操作 1、插入节点代码示例: <p title=”选择你喜欢的水果”>你最喜欢的水果是?</p> <ul> <li title=”苹果”>苹果</li> <li title=”橘子”>橘子</li> <li title=”菠萝”>菠萝</li> </ul> <script language=”javascript”> var $li_1=$(“<li title=’香蕉’>香蕉</li>”); var $li_2=$(“<li title=’雪梨’>雪梨</li>”); $(“ul”).
苦咖啡
2018/05/07
1.3K0
VBA操作VBA——代码操作
有了前面VBA工程对象的基础,要操作代码就容易了,只要找到对象对应的属性、方法就可以。
xyj
2020/07/28
2.5K0
VBA操作VBA——代码操作
嵌入式中状态机的几种骚操作
状态机可以分为状态和事件 ,状态的跃迁都是受事件驱动的,因此可以通过一个二维表格来表示状态的跃迁。
混说Linux
2023/02/24
1K0
嵌入式中状态机的几种骚操作
【Ruby on Rails】Model中关于保存之前的原值和修改状态
今天在Rails的Model中遇到了一个问题—— 当我从Model类中获取了一个ActiveRecord对象,对其进行了一系列修改(尚未保存),我该如何确定究竟哪些修改了呢? (设Model为Option,相关的的参数为correct) 我本来采取的方法是——在数据表中新增一个ori_correct参数,每次对象保存之前都和correct做到同步,这样一来,是不是correct字段发生了修改也就得以判断了。 但是这样的缺点也显而易见——如果以后参数个数很多的话,岂不是得每一个都得来一个相应的ori_字段?这
HansBug
2018/04/11
1.7K0
Nightwatch中如何模拟键盘操作
在自动化测试中有这样一个场景,在一个输入框中输入一串字符,然后执行敲回车键,验证搜索结果,以Google搜索为例,代码如下:
Peter Shen
2020/06/12
1.3K0
Java中如何操作超大数
我们知道Integer的最大值是 2^31 - 1,Long最大值是 2^63 -1, 不管是32位机还是64位机都是这样, 通常来说我们要操作一个大于 Integer最大值的数的时候会用 Long来进行, 但万一我们遇到一个比 Long的最大值还大的数怎么办呢?
PhoenixZheng
2018/08/07
4290
Java中如何实现原子操作?
在Java中,J实现原子操作 可以通过锁和循环CAS的方式来实现原子操作。 1 使用循环CAS操作原子操作 package com.yy;
爱明依
2019/03/12
8590
【Groovy】集合遍历 ( 操作符重载 | 集合中的 “ + “ 操作符重载 | 集合中的 “ - “ 操作符重载 | 代码示例 )
对集合使用 " + " 运算符 , 其作用相当于 调用 plus 方法 , " + " 符号两侧的值就是 plus 方法的
韩曙亮
2023/03/30
1.2K0
【Groovy】集合遍历 ( 操作符重载 | 集合中的 “ + “ 操作符重载 | 集合中的 “ - “ 操作符重载 | 代码示例 )
点击加载更多

相似问题

Rails如何计算操作的响应代码

10

如何更改Swagger中成功操作的响应状态代码?

22

Rails控制器操作不响应更改

12

如何从rails控制器操作发出404响应?

71

单个Rails控制器操作中的多个JSON响应

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文