谷歌应用引擎PHP文件上传


Google App Engine PHP file upload

我用PHP开发了一个API,托管在Google App Engine上,用于我的Android应用程序。

基本上,当用户想要更改他的个人资料图片时,安卓应用程序会向服务器发送一个请求,其中包含用户id、会话密钥和要上传的图片。我想在谷歌云上上传这张照片,但由于谷歌应用程序引擎要求你建立一个公共上传URL来上传文件,我如何生成上传URL,然后使用这个URL在一个请求中在我的谷歌云中上传个人资料图片?

在生成上传URL后,我尝试使用基本的PHP重定向,但我得到了HTTP405。

我真的被卡住了,我真的不明白为什么你需要在上传文件到谷歌应用引擎之前创建一个URL。。。

来源:https://cloud.google.com/appengine/docs/php/googlestorage/user_upload

你想上传到谷歌云存储上的照片似乎在GCS上保存为Blob,这就是他们要求你创建URL的原因。遵循文档[1],它与python中的Blobstore API相关,但blob的概念对于任何语言都是相同的,因此阅读blob是很好的。下面还有一个示例代码,可以帮助您在GCS上传照片。

$options = [ 'gs_bucket_name' => 'bucket-name' ];
    $upload_url = CloudStorageTools::createUploadUrl('/upload', $options);
<form action="<?php echo $upload_url?>" method="post" enctype="multipart/form-data">
      <input type ="file" name="fileupload" id = "fileupload">
      <input type="submit" value="Upload" name ="submit">
 </form>
Upload Handler:
<?php
use google'appengine'api'cloud_storage'CloudStorageTools;
$gs_name = $_FILES['fileupload'];
$buffer = file_get_contents($gs_name['tmp_name']);
$bucket = CloudStorageTools::getDefaultGoogleStorageBucketName();
$user_pic_url = 'gs://' . $bucket 
. (substr($final_file_path,0,1) != '/' ? '/' : '' )
. $final_file_path;
// set file options on Google Could Storage 
$options = stream_context_create( ['gs' => ['acl' => 'public-read', 
'Content-Type' => 'image/jpg']] );
echo "<br>";
$my_file = fopen($user_pic_url, 'w', false, $options);
fclose($my_file);

[1] Blob存储API:https://cloud.google.com/appengine/docs/python/blobstore/

$pdf->Output('example_025.pdf', 'I');
$DynamicNameofPic = rand(1000,10000)."_Invoice.pdf";
$FileNameDynamic = "gs://#######/".$DynamicNameofPic;
$pdf->Output($FileNameDynamic,'F');
$image_dataURL = "https://storage.googleapis.com/##########/".$DynamicNameofPic;
$image_data = file_get_contents($image_dataURL);$fileName = $DynamicNameofPic;