首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebase存储上载php

Firebase存储上载php
EN

Stack Overflow用户
提问于 2018-04-12 08:01:37
回答 1查看 9.7K关注 0票数 2

我目前正试图使用php上传到Firebase云存储,但遇到了一个问题。

我在html中有一个表单,它接受上传的文件(在我的例子中是一个图像),并将它传递给一个php文件。

这个图像非常小,12.8kB,和JPEG图像。

php文件接收图像,并尝试将其上传到存储区。我当前的php代码大致是:

代码语言:javascript
复制
$storage = new StorageClient(['projectId' => '<my_project_id> ']);
$bucket = $storage->bucket('images');
$bucket->upload($_FILES['imageToUpload']['tmp_name']);

我可以让它打印桶名,它的细节,所以我知道这不是造成错误的部分。

我得到的错误是,

代码语言:javascript
复制
Fatal error: Uncaught InvalidArgumentException: A name is required when data is of type string or null. 
in /var/www/html/Images/vendor/google/cloud-storage/src/Bucket.php:258 
Stack trace: #0 /var/www/html/Images/uploadImage.php(74): Google\Cloud\Storage\Bucket->upload('/tmp/phpA9SAM8') 
#1 {main} thrown in /var/www/html/Images/vendor/google/cloud-storage/src/Bucket.php on line 258

哦,我还在用apache2开发16.04 Ubuntu (如果这很重要)。(但我已经能够用php上传到自己的电脑上了。)现在只需重构使用Firebase )

编辑:当我将代码更改为

代码语言:javascript
复制
$bucket->upload(
    file_get_contents($_FILES['imageToUpload']['tmp_name']),
    [
        'name' => $_FILES['imageToUpload']['name']
    ]
);

我得到了错误:

代码语言:javascript
复制
Fatal error: Uncaught Google\Cloud\Core\Exception\NotFoundException: { "error": { "errors": [ { "domain": "global", "reason": "notFound", "message": "Not Found" } ], "code": 404, "message": "Not Found" } } in /var/www/html/Images/vendor/google/cloud-core/src/RequestWrapper.php:263
 Stack trace: #0 /var/www/html/Images/vendor/google/cloud-core/src/RequestWrapper.php(168): Google\Cloud\Core\RequestWrapper->convertToGoogleException(Object(GuzzleHttp\Exception\ClientException)) 
#1 /var/www/html/Images/vendor/google/cloud-core/src/Upload/MultipartUploader.php(64): Google\Cloud\Core\RequestWrapper->send(Object(GuzzleHttp\Psr7\Request), Array) 
#2 /var/www/html/Images/vendor/google/cloud-storage/src/Bucket.php(268): Google\Cloud\Core\Upload\MultipartUploader->upload() 
#3 /var/www/html/Images/uploadImage.php(75): Google\Cloud\Storage\Bucket->upload('/tmp/phpR2vYYg', Array) 
#4 {main} thrown in /var/www/html/Images/vendor/google/cloud-core/src/RequestWrapper.php on line 263
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-12 11:27:10

通过使用$_FILES['imageToUpload']['tmp_name'],您使用的是上传图像的临时名称作为内容,而不是实际的图像文件。

解决此问题的quickes方法是使用:

代码语言:javascript
复制
$bucket->upload(
    file_get_contents($_FILES['imageToUpload']['tmp_name']),
    [
        'name' => $_FILES['imageToUpload']['name']
    ]
);

upload方法接受一个选项数组(包括目标文件名),如该方法的PHPDoc:https://github.com/GoogleCloudPlatform/google-cloud-php/blob/master/Storage/src/Bucket.php#L216中所描述的

不过,请记住,直接使用上传的文件名(而不是tmp_name)会产生安全隐患,因此在将上传的文件移到云存储中之前,请确保对上传的文件进行验证和净化。

http://php.net/manual/en/features.file-upload.post-method.php http://php.net/manual/en/function.move-uploaded-file.php

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49791073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档