我正在尝试实现用户上传图像的能力。我将该图像保存到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。