gpt4 book ai didi

php - 如何在我的脚本/自动加载中包含适用于 PHP 的 Google App Engine?

转载 作者:搜寻专家 更新时间:2023-10-31 21:07:17 25 4
gpt4 key购买 nike

我在 Ubuntu 网络服务器上有一个网站(不是应用程序,也不托管在 App Engine 上),我想使用谷歌云存储来上传/下载大文件。我正在尝试将文件直接上传到 Google Cloud Storage这不起作用(可能是因为我犯了一些基本错误)。

我已经安装了 Google Cloud SDK下载解压Google App Engine .如果我现在包含 CloudStorageTools.php 我会得到一个错误:

Class 'google\appengine\CreateUploadURLRequest' not found"

我的脚本是这样的:

require_once 'google/appengine/api/cloud_storage/CloudStorageTools.php';
use google\appengine\api\cloud_storage\CloudStorageTools;
$options = [ 'gs_bucket_name' => 'test' ];
$upload_url = CloudStorageTools::createUploadUrl( '/test.php' , $options );

最佳答案

如果您想使用 Google App Engine (gae) 的功能,您将需要托管在 gae 上,这可能会对您的应用程序架构产生更大的影响(它使用自定义的 google 编译的 php 版本,具有有限的库和没有本地文件处理,因此所有这些功能都需要放入 blob 存储或 gcs - Google Cloud Storage)。

对于在 ubuntu 上运行的 PHP 应用程序,最好的办法是使用 google-api-php-client 连接到存储 JSON api。不幸的是,文档对 php 来说不是很好。你可以在How to rename or move a file in Google Cloud Storage (PHP API)查看我的回答查看如何获取/复制/删除对象。要上传,我建议检索预签名的上传 URL,如下所示:

//get google client and auth token for request
$gc = \Google::getClient();
if($gc->isAccessTokenExpired())
$gc->getAuth()->refreshTokenWithAssertion();
$googleAccessToken = json_decode($gc->getAccessToken(), true)['access_token'];

//compose url and headers for upload url request
$initUploadURL = "https://www.googleapis.com/upload/storage/v1/b/"
.$bucket."/o?uploadType=resumable&name="
.urlencode($file_dest);

//Compose headers
$initUploadHeaders = [
"Authorization" =>"Bearer ".$googleAccessToken,
"X-Upload-Content-Type" => $mimetype,
"X-Upload-Content-Length" => $filesize,
"Content-Length" => 0,
"Origin" => env('APP_ADDRESS')
];

//send request to retrieve upload url
$req = $gc->getIo()->makeRequest(new \Google_Http_Request($initUploadURL, 'POST', $initUploadHeaders));

// pre signed upload url that allows client side upload
$presigned_upload_URL = $req->getResponseHeader('location');

通过将该 URL 发送到您的客户端,您可以使用它通过生成适当 PUT 请求的上传脚本将文件直接 PUT 到您的存储桶。这是 AngularJS 中带有 ng-file-upload 的示例:

file.upload = Upload.http({
url: uploadurl.url,
skipAuthorization: true,
method: 'PUT',
filename: file.name,
headers: {
"Content-Type": file.type !== '' ? file.type : 'application/octet-stream'
},
data: file
});

祝你好运 - 如果你不想使用 App Engine 一路谷歌,那么 gcs 是一个艰难的选择!

关于php - 如何在我的脚本/自动加载中包含适用于 PHP 的 Google App Engine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30345900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com