gcloud-node-如何确保通过签名URL上传到Google Cloud Storage的文件是公开可读的? [英] gcloud-node - How do I ensure that files uploaded to Google Cloud Storage via signed URLs are publicly readable?

查看:51
本文介绍了gcloud-node-如何确保通过签名URL上传到Google Cloud Storage的文件是公开可读的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想允许客户端(浏览器中的JavaScript)将文件上传到Google Cloud Storage,目前,我通过生成

I want to allow clients (JavaScript in browser) to upload files to Google Cloud Storage, something I currently accomplish by generating signed URLs. However, the uploaded files are private by default. How can I ensure that files uploaded via signed URLs are publicly readable?

推荐答案

控制文件ACL通过标头

Controlling file ACLs is handled via the header x-goog-acl, which must also be included when calculating the signed URL. For public readability, use the value public-read.

let request = new XMLHttpRequest()
request.onreadystatechange = () => {
  if (request.readyState === XMLHttpRequest.DONE) {
    if (request.status === 200) {
      console.log(`Google Cloud Storage upload was successful:`, request.responseText)
    } else {
      console.log(`Google Cloud Storage upload was not successful: ${request.status}`)
    }
  }
}

request.open('PUT', signedUrl, true)
// Don't care about content-type header for signature calculation
request.setRequestHeader('content-type', 'ignore')
request.setRequestHeader('x-goog-acl', 'public-read')
request.send(file)

示例服务器端代码(用于获取签名的URL):

let gcloud = require('gcloud')
let moment = require('moment')

let gcs = gcloud.storage({
  projectId: process.env.GCLOUD_PROJECT_ID,
  credentials: {
    client_email: process.env.GCLOUD_CLIENT_EMAIL,
    private_key: process.env.GCLOUD_PRIVATE_KEY,
  },
})

let bucket = gcs.bucket('aBucket')
let cloudFile = bucket.file('aFile')
cloudFile.getSignedUrl({
  action: 'write',
  expires: moment.utc().add(1, 'days').format(),
  contentType: 'ignore',
  extensionHeaders: {'x-goog-acl': 'public-read',},
}, (error, signedUrl) => {
  if (error != null) {
    console.log(`Failed to obtain signed URL for file`)
  } else {
    console.log(`Got signed URL for file: ${signedUrl}`)
  }
})

这篇关于gcloud-node-如何确保通过签名URL上传到Google Cloud Storage的文件是公开可读的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆