【问题标题】:How does google storage file upload work for app engine using php?谷歌存储文件上传如何为使用 php 的应用引擎工作?
【发布时间】:2018-06-05 10:57:06
【问题描述】:

我是编码世界的新手。我想将一个简单的 txt 文件上传到我的云存储中的存储桶。我没有找到任何有用的云文档。 这是不工作的代码:

<?php
require_once 'vendor/autoload.php';
use Google\Cloud\Storage\StorageClient;
define("PROJECT_ID", 'projectID');
define("BUCKET_NAME", 'bucketname');
$client = new Google_Client();
$client->setApplicationName("API_Cloud_Storage");
$client->useApplicationDefaultCredentials();
$client->setScopes(["https://www.googleapis.com/auth/cloud-platform"]);
$service = new Google_Service_Storage($client);
$request = $service->objects->listObjects(BUCKET_NAME);
foreach ($request["items"] as $object)
  printf("%s\n", $object->getName());
  printf("%s\n", $object->get);
$storage = new StorageClient();
$bucket = $storage->bucket(BUCKET_NAME); // Put your bucket name here.
$filePath="C:\users\useraccount\Desktop\address_file\textfile.txt";
$objectName="textfile.txt";
 $object = $bucket->upload(file_get_contents($filePath),
 ['name' => $objectName]);

?>

【问题讨论】:

    标签: php google-app-engine google-cloud-storage


    【解决方案1】:

    似乎问题出在您的代码中,并且您可以参考相关问题中提供的答案(它还有指向另一个有用文档的链接),可以帮助您更正代码 [1]。您也可以依赖 GitHub [2] 中的此示例代码。

    就上传本地文件以供稍后提供公共访问权限以对其进行写入的概念而言。我认为您可能需要阅读更多有关从文件系统 [3] 提供随您的应用程序上传的文件的信息。我还建议您通读整个文档,因为它讨论了从脚本或直接从 GCS [4] 提供文件。

    [1]https://stackoverflow.com/a/48559967

    [2]https://github.com/GoogleCloudPlatform/php-docs-samples/blob/master/appengine/php55/storage/app.php#L79

    [3]https://cloud.google.com/appengine/docs/standard/php/googlestorage/#is_there_any_other_way_to_read_and_write_files

    [4] https://cloud.google.com/appengine/docs/standard/php/googlestorage/public_access#top_of_page

    【讨论】:

    • 我也认为问题在于将文件的内容上传到存储并通过 file_get_contents($filepath) 读取文件。似乎 file_get_contents 在代码中不起作用,因为对象被正确创建。顺便说一句,[4] 很有用,因为我现在正在尝试实现使用 html 页面读取文件的逻辑,该页面具有使用 CloudStorageTools::serve("filename");
    【解决方案2】:

    幸运的是,Google App Engine (GAE) 提供了内置的 Google Cloud Storage (GCS) 流包装器,允许您使用许多标准 PHP 文件系统函数在 App Engine PHP 应用程序中读取和写入文件。我也在提高我的编码技能,并在 GCP 文档中找到了对我有用的提示。

    从您提供的代码 sn-p 中,您必须确保您至少完成了 2 件事:

    1. 您已在 Google Cloud Storage (GCS) [1] 中正确创建了一个存储桶。 确保将代码中的“BUCKET_NAME”替换为您创建的 GCS 存储桶的名称,并指明您要上传的文本文件的文件路径。
    2. 您已将 PHP 应用程序配置为将文件写入您的应用程序 [2],或者如果您希望其他用户能够将文件上传到您的 GCS 存储桶 [3],则允许​​用户上传。

    这些是标准的操作指南(教程位于导航栏的底部),因此请务必查看 Github 上提供的示例,以了解完整的代码并根据您的风格调整样式。

    希望这会有所帮助!

    [1]https://cloud.google.com/storage/docs/creating-buckets

    [2]https://cloud.google.com/appengine/docs/standard/php/googlestorage/#top_of_page

    [3]https://cloud.google.com/appengine/docs/standard/php/googlestorage/user_upload

    【讨论】:

    • 感谢您的回复。顺便说一句,我已经学会了如何编写文件,但是从最近几天开始我一直坚持的事情是如何将文件上传到存储中。存储桶已正确创建,因为它适用于写入文件。我仍然需要弄清楚阅读和上传是如何工作的。
    • 感谢您的澄清。跟进您的问题,让我花一些时间重现该问题,然后为您提供解决方案。同时查看此文档 [1]。您可以试用 App Engine 上传服务,看看它是否适合您。
    • $upload_url = CloudStorageTools::createUploadUrl('/upload/handler', $options;
    • 我没有得到我需要在 /upload/handler 的位置传递什么,我想上传一个文件?因为我也尝试过使用这种方法,但它不起作用。顺便说一句,非常感谢您的真诚帮助:)
    • 很高兴为您提供帮助!假设您使用的是 GitHub 中提供的代码,您不需要传递任何东西来代替“/upload/handler”,因为那是指 PHP 中调用的用于处理用户上传的方法。您是否尝试编写代码在部署期间上传本地文件或处理外部用户上传到您的 GCS 存储桶?
    猜你喜欢
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 2015-01-02
    • 2010-12-03
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多