我感觉好像在这里丢失了一些东西,但是在标准环境中使用PHP 5.5的Google App Engine上,我可以非常轻松地创建上传URL,以供用户上传文件,而不会浪费时间在PHP中,例如:>
<?php
use google/appengine/api/cloud_storage/CloudStorageTools;
?><form action="<?php echo CloudStorageTools::createUploadUrl('my/upload/handler.php'); ?>" method="post">
<input type="file" name="file" />
<input type="submit" value="Upload" />
</form>
当然大大简化了(因为该URL仅持续60秒)。
但是,此API似乎对运行PHP 7.2的应用程序引擎不可用,我确实需要使用它,而且我似乎找不到用于获取上载URL的备用API。这些真的停止了吗?
还有其他一些非常有用的功能,例如getImageURL()
,用于获取缩略图等。当然,许多文档仍然指向上述用于处理用户上传到App Engine网站的方法!
那么我如何在较新的API中创建和使用上传URL?
答案 0 :(得分:2)
是的,您可以使用PHP 7.2 Google Client Library创建和使用上传URL进行云存储。
您可以直接将处理程序放入表单的action属性中,而无需调用API。
请注意,在此示例中,您将要在其中存储文件的存储桶的名称作为环境变量放在 app.yaml 文件中:
runtime: php72
env_variables:
GOOGLE_STORAGE_BUCKET: <your_bucket_name>
index.php :
<?php
namespace Google\Cloud\Samples\AppEngine\Storage;
use Google\Auth\Credentials\GCECredentials;
require_once __DIR__ . '/vendor/autoload.php';
$bucketName = getenv('GOOGLE_STORAGE_BUCKET');
$projectId = getenv('GOOGLE_CLOUD_PROJECT');
$defaultBucketName = sprintf('%s.appspot.com', $projectId);
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
switch ($_SERVER['REQUEST_URI']){
case '/user/upload':
upload_file($bucketName);
exit;
}
header('Location: /');
exit;
}
?>
<html>
<form action="/user/upload" enctype="multipart/form-data" method="post">
Files to upload: <br>
<input type="file" name="uploaded_files" size="40">
<input type="submit" value="Send">
</form>
</html>
处理程序功能:
function upload_file($bucketName)
{
$fileName = $_FILES['uploaded_files']['name'];
$tempName = $_FILES['uploaded_files']['tmp_name'];
move_uploaded_file($tempName, "gs://${bucketName}/${fileName}.txt");
sprintf('Your file "%s" has been uploaded.', $fileName);
}
composer.json :
{
"require": {
"google/cloud-storage": "^1.5"
},
"require-dev": {
"phpunit/phpunit": "^5",
"google/cloud-tools": "^0.6"
}
}
我建议您从Github中克隆样本并自己尝试。