node.js - 在浏览器中查看而非下载 Google Cloud Storage 文件

标签 node.js express google-cloud-platform google-cloud-storage multer

我正在使用 NodeJs/express 创建一个 POST api 端点以将文件上传到谷歌云存储并返回一个公共(public) URL,如下所示:
https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]

上传完成后,我得到 URL,当我打开它时,文件被直接下载(图像、pdf 等......)

有没有办法在浏览器中查看和打开它?

这是我的上传功能:

const uploadImage = (file) => new Promise((resolve, reject) => {
  const { originalname, buffer } = file

  const blob = bucket.file(originalname.replace(/ /g, "_"))
  const blobStream = blob.createWriteStream({
    resumable: false
  })

  blobStream.on('finish', () => {
    const publicUrl = format(
      `https://storage.googleapis.com/${bucket.name}/${blob.name}`
    )
    resolve(publicUrl)
  })
  .on('error', () => {
    reject(`Unable to upload image, something went wrong`)
  })
  .end(buffer)

})

谢谢

最佳答案

如果 URL 看起来像上面的代码,https://storage.googleapis.com/bucketName/objectName ,浏览器应该可以直接查看,只要满足以下几个条件:

  • 对象的 contentType 设置得当。如果不指定类型,则默认为 application/octet-stream ,并且网络浏览器可能会决定只下载这样的对象而不是以某种形式显示它。
  • 对象的元数据不会覆盖 contentDisposition。可以通过将该属性设置为 attachment; filename=foo.txt 来强制将对象作为附件下载。 .
  • 该对象要么是公开可见的,要么是在 GET 请求中传递了适当的凭据。这不是默认设置。上传对象时,您需要明确注意 ACL 应允许组 allUsers读取权限。或者,您可以设置存储桶的默认对象 ACL 属性以包含该权限。

  • 在您的情况下,对象已成功下载,因此不是 ACL 问题,如果您不知道 contentDisposition 设置,则可能是问题 #1。确保为对象指定合理的内容类型。

    例子:
    const blobStream = blob.createWriteStream({
      resumable: false
      contentType: "text/html"
    })
    

    关于node.js - 在浏览器中查看而非下载 Google Cloud Storage 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60602903/

    相关文章:

    javascript - 如何使用 CSRF 测试 express form post?

    laravel - 无法在 Google Cloud SQL 中运行迁移

    google-cloud-platform - GCP : You do not have sufficient permissions to SSH into this instance

    javascript - Node/Express 安全性

    node.js - 如何在 NodeJS 服务器上使用 mongoose 进行同步查询

    node.js - 如何使用相对路径在 Webpack 中使用 SCSS (SASS) 加载 font-awesome?

    android - 类型错误 :Request path contains unescaped characters - npm & cordova

    javascript - 如何使用Express和MongoDB将json从nodejs服务器发送到客户端js文件

    mysql - Sequelize : multiple where clause

    unix - Google Cloud Platform 访问张量板