如何在Localhost Google App引擎上上传文件,运行PHP 7.2



我正在尝试实现用户上传图像的能力。我将该图像保存到Google存储中。然后,我将使用GoogleStoragetools为图像获取公共服务URL,以便我可以在网站上显示。

我需要在Localhost上进行测试。当我以前使用php5.5时,我可以使用dev_appserver.py,它会模仿gs://集成,然后让我像在云中运行一样创建和与文件进行交互。

但是,我正在为此应用使用php7.2,该应用无法使用dev_appserver.py,我只需要贯穿PHP的内置Web服务器即可。当我尝试上传文件时,我会收到Google存储错误。这是我的脚本中的代码,它带有上传文件:

$storage = new StorageClient();
$storage->registerStreamWrapper();
$basefilename = uniqid().'-'.sanitize_string($_FILES['imagefile']['name']);
$gsfilepath = 'gs://#default#/images/'.$basefilename;
if ( ! move_uploaded_file($_FILES[ 'imagefile' ]['tmp_name'], $gsfilepath)) {
    error_log('Failed to move uploaded file. ' . $_FILES[ 'imagefile' ]['tmp_name'] . ' => ' . $gsfilepath);
}

这些是我尝试运行move_uploaded_file()代码时遇到的错误:

google cloud core exception notfoundException:客户端错误: POST https://www.googleapis.com/upload/storage/v1/b//o?uploadType=resumable 导致404 Not Found响应:未发现 /users/kenny/myproject/trunk/server/gae/vendor/google/cloud-core/src/requestwrapper.php 在第263行

致命错误:未被教的Google Cloud core exception notFoundException: 客户端错误:POST https://www.googleapis.com/upload/storage/v1/b//o?uploadType=resumable 导致404 Not Found响应:未发现 /users/kenny/myproject/trunk/server/gae/vendor/google/cloud-core/src/requestwrapper.php 在第263行

警告:move_uploaded_file():无法移动 '/private/var/文件夹/1K/8XT74J593SSS9YXBTQRV925J40000GP/T/PHPKSSN6Q' 到'gs://#default#/images/5c1be56fd752d-hold-on-on-to-your-butts.png'in /users/kenny/myproject/trunk/server/gae/testupload-upload.php在线 11

存储牌名称 #default#在云存储流包装器中无效。如您在错误中所看到的,库要发布的URI缺失了桶ID。

查看为什么,请参阅google/cloud-storage中的StreamWrapper::openPath()方法。

存储键名表示为parse_url返回值中的host键。如下所示,您提供的GS URI导致parse_url失败:

php > $url = 'gs://#default/foo';
php > var_dump(parse_url($url));
bool(false)

我假设#default#是在某些情况下工作的助手。尝试在GS URI中提供真正的存储桶ID。

最新更新