无法将具有ACL公共读取的文件上载到数字海洋空间

编程入门 行业动态 更新时间:2024-10-15 14:13:39
本文介绍了无法将具有ACL公共读取的文件上载到数字海洋空间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试从浏览器将图像上载到数字海洋空间。这些图片应该是公开的。我能够成功上载图像。

但是,尽管ACL设置为public-read,但上载的文件始终是私有的。

我知道它们是私有的,因为a)仪表板显示权限是";private";,b)因为公共URL不起作用,c)在仪表板中手动将权限更改为";public";可以修复所有问题。

这是我正在使用的整个流程。

  • 在后台创建预签名URL
  • 将该URL发送到浏览器
  • 将图像上载到该预先签名的URL
  • 您知道为什么这些图像不公开吗?

    代码

    以下示例是用TypeScript编写的,并使用AWS的v3 SDK。

    后端

    这将生成用于上载文件的预签名URL。

    import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3' import { getSignedUrl } from '@aws-sdk/s3-request-presigner' const client = new S3Client({ region: 'nyc3', endpoint: 'nyc3.digitaloceanspaces', credentials: { accessKeyId: process.env.DIGITAL_OCEAN_SPACES_KEY, secretAccessKey: process.env.DIGITAL_OCEAN_SPACES_SECRET, }, }) const command = new PutObjectCommand({ ACL: 'public-read', Bucket: 'bucket-name', Key: fileName, ContentType: mime, }) const url = await getSignedUrl(client, command)

    然后将预签名的URL发送到浏览器。

    前端

    这是客户端上实际将文件上传到Digital Ocean的代码。file是File object。

    const uploadResponse = await fetch(url, { headers: { 'Content-Type': file.type, 'Cache-Control': 'public,max-age=31536000,immutable', }, body: file, method: 'PUT', }) 元数据
    • AWS SDK:3.8.0
    acl

    原来,对于数字海洋,您还需要将public-read推荐答案设置为PUT请求中的头部。

    //front-end const uploadResponse = await fetch(url, { headers: { 'Content-Type': file.type, 'Cache-Control': 'public,max-age=31536000,immutable', 'x-amz-acl': 'public-read', // add this line }, body: file, method: 'PUT', })

    更多推荐

    无法将具有ACL公共读取的文件上载到数字海洋空间

    本文发布于:2023-10-28 04:06:54,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1535469.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:海洋   数字   文件   空间   ACL

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!