NodeJS gcloud - Upload to google storage with public-read property/custom cache-expire

帅比萌擦擦* 提交于 2019-12-21 06:40:46

问题


I am trying to upload to google storage using the gcloud library (NodeJS).

I need to enable public-read property and also set the cache-expiration to 5 minutes.

I am using this (simplified) code:

storage = gcloud.storage({options}
bucker = storage.bucket('name');
fs.createReadStream(srcPath).pipe(bucket.file(targetFile).createWriteStream()).on('error', function(err) 

How do I go about setting the approprate ACL/cache expire? (I found this but not sure what to make of it: https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.11.0/storage?method=acl)

Thanks for the help


回答1:


You can set the predefined ACL following the instructions here:

yourBucket.acl.default.add({
  entity: "allUsers",
  role: gcloud.storage.acl.READER_ROLE
}, function (err) {})

Regarding cache control, I don't believe you can set this as a default, but you can set this at the time of uploading your file:

var opts = { metadata: { cacheControl: "public, max-age=300" } }
bucket.file(targetFile).createWriteStream(opts)

Reference: https://cloud.google.com/storage/docs/reference-headers#cachecontrol




回答2:


Api changed, use:

var gcloud = require('gcloud')({
  projectId: 'your_id',
  keyFilename: 'your_path'
});

var storage = gcloud.storage();
var bucket = storage.bucket('bucket_name');

bucket.acl.default.add({
    entity: 'allUsers',
    role: storage.acl.READER_ROLE
}, function(err) {});

To make the entire bucket public you can also use:

bucket.makePublic

Source: https://github.com/GoogleCloudPlatform/gcloud-node/blob/v0.16.0/lib/storage/bucket.js#L607

Or for just the file:

var bucketFile = bucket.file(filename);

// If you upload a new file, make sure to do this 
// in the callback of upload success otherwise it will throw a 404 error

bucketFile.makePublic(function(err) {});

Source: https://github.com/GoogleCloudPlatform/gcloud-node/blob/v0.16.0/lib/storage/file.js#L1241 (link might change, look for makePublic in the source code.)

Or:

bucketFile.acl.add({
    scope: 'allUsers',
    role: storage.acl.READER_ROLE
}, function(err, aclObject) {});

which is the verbose version.

Source: https://github.com/GoogleCloudPlatform/gcloud-node/blob/v0.16.0/lib/storage/file.js#L116




回答3:


Stephen's comment is accurate, however it did not work for me as the value didnt get set. After some trial and error, turn out cacheControl (no dash) to get it to work. At the time of writing, this is not documented anywhere that it needs to be in this format. I assume other fields will have the same issue.

var opts = { metadata: { "cacheControl": "public, max-age=300" } }
bucket.file(targetFile).createWriteStream(opts)


来源:https://stackoverflow.com/questions/27248518/nodejs-gcloud-upload-to-google-storage-with-public-read-property-custom-cache

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!