我使用Google云端存储JavaScript客户端库将文件上传到Google云端存储。然后,我希望获得一个公开链接,我想与朋友分享而无需Google帐户。我尝试使用insertObject重用the JavaScript example作为以下代码:
var request = gapi.client.request({
'path': '/upload/storage/' + API_VERSION + '/b/' + BUCKET + '/o',
'method': 'POST',
'params': {'uploadType': 'multipart'},
'x-goog-acl','public-read',
'headers': {
'Content-Type': 'multipart/mixed; boundary="' + boundary + '"'
},
在我的Google云端存储分区(myphoto_upload)中成功上传。但我无法通过https://storage.cloud.google.com/myphoto_upload/brv_brown.png访问。我尝试用'x-goog-acl','public-read'
替换'acl' : [{'entity': 'allUsers', 'role': 'READER'}],
或'body':{'entity': 'allAuthenticatedUsers', 'role': 'READER'}
,但结果是一样的。提前感谢您的帮助。
答案 0 :(得分:1)
首先,你有一个错字。在:
之后,它应该是,
而不是x-goog-acl
。
其次,x-goog-acl
是标题,因此它应该包含在标题中。
答案 1 :(得分:1)
我认为您的问题涉及将文件上传到GCS,然后允许其他人下载文件。如果您要求其他人匿名将文件上传到您的存储桶,那就不同了。如果我误解了,请告诉我。
如果您以编程方式生成对象的公共链接,最简单的方法是使用以下两种URL模式之一:
https://storage.googleapis.com/myphoto_upload/brv_brown.png
https://myphoto_upload.storage.googleapis.com/brv_brown.png
或者,代码:
"https://storage.googleapis.com/" + bucket_name + "/" + object_name
只要ACL包含allUsers:READER,这些URL就可以匿名工作。
答案 2 :(得分:0)
对于此库:https://github.com/GoogleCloudPlatform/google-cloud-php#google-cloud-storage-ga
使用如下:
use Google\Cloud\Storage\StorageClient;
$storage = new StorageClient([
'projectId' => '123456789' // use your own project ID
]);
//this can be created with other ENV mode server side
putenv('GOOGLE_APPLICATION_CREDENTIALS='.dirname(__FILE__) . '/gauth.json');
/*
* For public access :
* https://storage.googleapis.com/[BUCKET_NAME]/[FILE_NAME].png
*/
$bucket->upload(
fopen('data3.txt', 'r'), ['predefinedAcl' => 'publicRead']
);