- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用我的 Google 驱动器来存储我的文件,用户将在我的网站上上传这些文件。这是我目前使用的代码。
<!-- this is my index.php-->
<?php
ob_start();
error_reporting(E_ALL);
ini_set('display_errors', '1');
require("functions.php");
session_start();
header('Content-Type: text/html; charset=utf-8');
$authUrl = getAuthorizationUrl("", "");
?>
<!DOCTYPE html>
<html lang="fi">
<head>
<title>Google Drive Login and Upload</title>
<meta charset="UTF-8">
</head>
<body>
<a href=<?php echo "'" . $authUrl . "'" ?>>Authorize</a>
</body>
</html>
<!--This is my fileUpload.php-->
<?php
ob_start();
require_once("functions.php");
session_start();
header('Content-Type: text/html; charset=utf-8');
global $CLIENT_ID, $CLIENT_SECRET, $REDIRECT_URI;
$client = new Google_Client();
$client->setClientId($CLIENT_ID);
$client->setClientSecret($CLIENT_SECRET);
$client->setRedirectUri($REDIRECT_URI);
$client->setScopes('email');
$authUrl = $client->createAuthUrl();
getCredentials($_GET['code'], $authUrl);
$userName = $_SESSION["userInfo"]["name"];
$userEmail = $_SESSION["userInfo"]["email"];
?>
<!DOCTYPE html>
<html lang="fi">
<head>
<title>Logged in</title>
<meta charset="UTF-8">
</head>
<body>
Hello <?php echo $userName; ?>!
<br>
<?php echo $userEmail; ?>
<br><br><br>
<form enctype="multipart/form-data" action="formAction.php" method="POST">
<input type="file" name="file" required>
<br><br>
<label for="folderName">Folder name, this either uploads file to an existing folder or creates a new one based on the name</label>
<br>
<input type="text" name="folderName" placeholder="My cat Whiskers">
<br><br>
<input type="submit" name="submit" value="Upload to Drive">
</form>
</body>
</html>
<!-- this is my formaction.php where the action goes after submitting the file upload form-->
<?php
require_once 'google-api-php-client/src/Google/Client.php';
require_once 'google-api-php-client/src/Google/Service/Oauth2.php';
require_once 'google-api-php-client/src/Google/Service/Drive.php';
session_start();
header('Content-Type: text/html; charset=utf-8');
// Init the variables
$driveInfo = "";
$folderName = "";
$folderDesc = "";
// Get the file path from the variable
$file_tmp_name = $_FILES["file"]["tmp_name"];
// Get the client Google credentials
$credentials = $_COOKIE["credentials"];
// Get your app info from JSON downloaded from google dev console
$json = json_decode(file_get_contents("composer.json"), true);
$CLIENT_ID = $json['web']['client_id'];
$CLIENT_SECRET = $json['web']['client_secret'];
$REDIRECT_URI = $json['web']['redirect_uris'][0];
// Create a new Client
$client = new Google_Client();
$client->setClientId($CLIENT_ID);
$client->setClientSecret($CLIENT_SECRET);
$client->setRedirectUri($REDIRECT_URI);
$client->addScope(
"https://www.googleapis.com/auth/drive",
"https://www.googleapis.com/auth/drive.appfolder");
// Refresh the user token and grand the privileges
$client->setAccessToken($credentials);
$service = new Google_Service_Drive($client);
// Set the file metadata for drive
$mimeType = $_FILES["file"]["type"];
$title = $_FILES["file"]["name"];
$description = "Uploaded from your very first google drive application!";
// Get the folder metadata
if (!empty($_POST["folderName"]))
$folderName = $_POST["folderName"];
if (!empty($_POST["folderDesc"]))
$folderDesc = $_POST["folderDesc"];
// Call the insert function with parameters listed below
$driveInfo = insertFile($service, $title, $description, $mimeType, $file_tmp_name, $folderName, $folderDesc);
/**
* Get the folder ID if it exists, if it doesnt exist, create it and return the ID
*
* @param Google_DriveService $service Drive API service instance.
* @param String $folderName Name of the folder you want to search or create
* @param String $folderDesc Description metadata for Drive about the folder (optional)
* @return Google_Drivefile that was created or got. Returns NULL if an API error occured
*/
function getFolderExistsCreate($service, $folderName, $folderDesc) {
// List all user files (and folders) at Drive root
$files = $service->files->listFiles();
$found = false;
// Go through each one to see if there is already a folder with the specified name
foreach ($files['items'] as $item) {
if ($item['title'] == $folderName) {
$found = true;
return $item['id'];
break;
}
}
// If not, create one
if ($found == false) {
$folder = new Google_Service_Drive_DriveFile();
//Setup the folder to create
$folder->setTitle($folderName);
if(!empty($folderDesc))
$folder->setDescription($folderDesc);
$folder->setMimeType('application/vnd.google-apps.folder');
//Create the Folder
try {
$createdFile = $service->files->insert($folder, array(
'mimeType' => 'application/vnd.google-apps.folder',
));
// Return the created folder's id
return $createdFile->id;
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
}
}
/**
* Insert new file in the Application Data folder.
*
* @param Google_DriveService $service Drive API service instance.
* @param string $title Title of the file to insert, including the extension.
* @param string $description Description of the file to insert.
* @param string $mimeType MIME type of the file to insert.
* @param string $filename Filename of the file to insert.
* @return Google_DriveFile The file that was inserted. NULL is returned if an API error occurred.
*/
function insertFile($service, $title, $description, $mimeType, $filename, $folderName, $folderDesc) {
$file = new Google_Service_Drive_DriveFile();
// Set the metadata
$file->setTitle($title);
$file->setDescription($description);
$file->setMimeType($mimeType);
// Setup the folder you want the file in, if it is wanted in a folder
if(isset($folderName)) {
if(!empty($folderName)) {
$parent = new Google_Service_Drive_ParentReference();
$parent->setId(getFolderExistsCreate($service, $folderName, $folderDesc));
$file->setParents(array($parent));
}
}
try {
// Get the contents of the file uploaded
$data = file_get_contents($filename);
// Try to upload the file, you can add the parameters e.g. if you want to convert a .doc to editable google format, add 'convert' = 'true'
$createdFile = $service->files->insert($file, array(
'data' => $data,
'mimeType' => $mimeType,
'uploadType'=> 'multipart'
));
// Return a bunch of data including the link to the file we just uploaded
return $createdFile;
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
}
echo "<br>Link to file: " . $driveInfo["alternateLink"];
?>
我遇到的问题是,当用户上传文件时,它不会进入我的谷歌驱动器,而是进入该用户的驱动器。 :(我不想要什么。我想将该文件存储到我的 Google 驱动器中。
请帮忙!!谢谢。
最佳答案
如果您成功将文件上传到用户的 Google 云端硬盘,那么恭喜您。你快到了。您唯一需要更改的是获取访问 token 的方式。参见 How do I authorise an app (web or installed) without user intervention? (canonical ?)
关于php - 如何使用 php 将文件上传到我的谷歌驱动器(不是最终用户),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31933636/
这两个包看起来非常相似: http://www.passportjs.org/packages/passport-google-oauth2/ http://www.passportjs.org/pa
我想在我的网站上添加通过 Google 和 Twitter 登录的按钮。我需要只使用应用程序的客户端而不是服务器端来完成此操作。但我没有找到任何 API。对于我发现的所有内容,我需要使用带有 key
我使用此链接通过 google plus 共享我的页面。 https://plus.google.com/share?url=http%3A%2F%2Fexample.com%2Fcompany%2
我正在尝试学习 google API,并且我的经验是使用 Python,因此我尝试使用 google api python 客户端来访问一些 google 服务,但在构建服务对象时遇到错误。 从 ap
在其实际的实时托管平台上构建实时站点的努力中,有没有办法告诉谷歌不要索引该网站?我发现了以下内容: http://support.google.com/webmasters/bin/answer.py
我正在开发一个 iOS 应用程序。当我运行用于 google+ 登录的程序时,在我点击允许访问按钮后,会显示此消息。 You've reached this page because we have
我有一个非常复杂的网站,每个页面包含 11 个 js 文件。 我最近添加了 google +1 按钮,代码如下: 这会正确显示 +1 按钮,直到我单击它。当我单击它时,出现此错误:https://
我正在尝试使用 google API 创建一个 html 文件,以便在 google MAPS 上显示 KML 文件。 这是 HTML 代码: function initMap() {
我是使用 Google Benchmark 的新手,在本地运行代码与在 Quick-Bench.com 上运行代码时,我收到了运行相同基准测试(下方)的不同结果,该基准测试使用 C++ 检索本地时间.
我已按照 Google 网站上的说明通过添加以下元标记在我的 AngularJS 网站上启用 Ajax 抓取: 呈现的内容有一些链接,如: User 1 User 2 User 3 还有一些呈现动态
通过 Google 手册实现 Google AppInvite - link . 启动 Invite Activity 并在 LogCat 中获取下一步: E/AppInviteAgent: Get
那么有人用过 Google 的 Go 吗?我想知道数学性能(例如触发器)与其他具有垃圾收集器的语言(如 Java 或 .NET)相比如何? 有人调查过吗? 最佳答案 理论性能:纯 Go 程序的理论性能
Stackdriver 测试我的网站启动速度慢 我们使用 cloudflare 作为我们的站点 CDN 提供商。我们使用 stackdriver 从外部测试站点可用性,我们将时间检查间隔设置为 1 分
我正在尝试使用 stax.GeneralConv() ( https://jax.readthedocs.io/en/latest/_modules/jax/experimental/stax.htm
我有一个从谷歌金融中提取日内数据的软件。但是,由于昨天 Google 更新了 API,所以软件报错了 Conversion from string HTML HEAD meta http-equiv=
我们在尝试从 Google 获取 oAuth token 时遇到“redirect_uri_mismatch”错误: [client 127.0.0.1:49892] {\n "error" : "
我的网站正在使用 Google reCAPTCHA 控件,但我听说它被阻止了 中国,反正我看到有人报告说将 API 更改为 https://www.recaptcha.net在中国工作? Anyone
背景 WordPress Google Adsense 谷歌自动插入 anchor 定广告 https://pptmon.com 问题 如下图所示,主播广告的容器高度太大了! 如何调整高度? 这是谷歌
我在使用 Google Colab 时遇到问题。当我想制作一个新的 Python3 Notebook 时,由于我登录了我的 Google 帐户,因此无法加载刚刚打开的新页面。 我该怎么办? 感谢您的帮
我正在使用 facebook和 google oauth2使用 passport js 登录, 有了这个流 用户点击登录按钮 重定向到 facebook/google auth 页面(取决于用户选择的
我是一名优秀的程序员,十分优秀!