无法将带有 ACL 公共读取的文件上传到 Digital Ocean 空间

2023-12-24

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

然而,尽管 ACL 设置为public-read,上传的文件始终是私有的.

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

这是我正在使用的总体流程。

  1. 在后端创建预签名 URL
  2. 将该 url 发送到浏览器
  3. 将图像上传到该预签名 URL

有什么想法为什么这些图像不公开吗?

Code

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

Backend

这会生成用于上传文件的预签名 URL。

import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'
import { getSignedUrl } from '@aws-sdk/s3-request-presigner'

const client = new S3Client({
    region: 'nyc3',
    endpoint: 'https://nyc3.digitaloceanspaces.com',
    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 发送到浏览器。

Frontend

这是客户端上实际将文件上传到 Digital Ocean 的代码。file is a 文件对象 https://developer.mozilla.org/en-US/docs/Web/API/File.

const uploadResponse = await fetch(url, {
    headers: {
        'Content-Type': file.type,
        'Cache-Control': 'public,max-age=31536000,immutable',
    },
    body: file,
    method: 'PUT',
})

Metadata

  • AWS 开发工具包:3.8.0

事实证明,对于 Digital Ocean,您还需要设置public-readACL 作为放置请求中的标头。

//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',
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法将带有 ACL 公共读取的文件上传到 Digital Ocean 空间 的相关文章

  • 使用 boto3 和 ftplib 将文件从 FTP 复制到 S3 存储桶失败,并显示“500 语法错误,命令无法识别”

    我需要将数据从 FTP 服务器发送到 S3 存储桶 而不将文件保存到本地驱动器 在互联网上 我发现我们可以使用io BytesIO 作为缓冲区 但我的代码失败了 error perm 500 语法错误 命令无法识别 剧本 ftp ftpli
  • 具有行为路径重定向的多个 Cloudfront 起源

    我有两个 S3 存储桶用作我的 Cloudfront 源服务器 example bucket 1 example bucket 2 两个存储桶的内容都位于这些存储桶的根中 我正在尝试将我的 Cloudfront 发行版配置为基于 URL 模
  • 从 Grails 控制器渲染视频内容

    毫无疑问又是一个愚蠢的新手问题 我在 Grails 控制器中有一个字节数组 其中包含视频文件 确切地说是 mp4 文件 的内容 我熟悉如何从 grails 控制器渲染 JSON XML 和其他基本类型 但我找不到任何显示如何输出视频的示例
  • 带有非字符串值的 AWS S3 x-amz-meta 错误:InvalidHeader 和 InvalidParameterType

    尝试使用node js AWS sdk时s3Client upload带有元数据的可选参数 const AWS require aws sdk const s3Client new AWS S3 params Key key secret
  • 使用 AmazonSNSClient 发送短信时的授权

    aws 官方文档如何发送短信 http docs aws amazon com sns latest dg sms publish to phone html使用 java 中的 aws SDK 非常简单 但是 当发送如底部示例所示的消息时
  • 将 S3 静态站点与应用程序负载均衡器结合使用

    我有一个 ALB 当前将流量路由到多个 url 如果我们需要执行维护 我希望能够将流量路由到静态 S3 站点 然后 我们将显示静态 维护 页面而不是登录页面 我创建了一个 CloudFront 发行版 允许 S3 站点加载 SSL 证书 但
  • 非键属性查询

    看起来 dynamodb 的query方法必须包含分区键作为过滤器的一部分 如果不知道分区键如何进行查询 例如 您有一个具有属性的用户表userid设置为分区键 现在我们想通过电话号码查找用户 是否可以在没有分区键的情况下执行查询 使用sc
  • 词法错误:在字符串中,“\”出现在可能不存在的字符之前[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在使用 Amazon SDK 将文档上传到 CloudSearch 该文档被格式化为 JSON 当我尝试上传数据时 出现以下错
  • AWS S3 生成签名 URL“AccessDenied”

    我正在使用 NodeJs 将文件上传到 AWS S3 我希望客户端能够安全地下载文件 因此 我尝试生成签名 URL 该 URL 在使用一次后就会过期 我的代码如下所示 上传中 const s3bucket new AWS S3 access
  • 处理响应后使用 Amazon S3 响应流

    我正在使用 Amazon SDK 并且有一个方法可以为存储在 Amazon S3 服务中的对象返回 Stream 它包含这样的内容 var request new GetObjectRequest WithBucketName bucket
  • 按带宽限制成员资格

    我刚刚将 Codeigniter 应用程序部署到 Amazon EC2 使用 S3 作为媒体 使用 RDS 作为 MySQL 我需要根据使用的带宽量限制用户帐户访问 帐户将基于带宽 例如基本帐户 x 每月最多 20GB 等 但是我不知道最好
  • S3 REST API 和 POST 方法

    我在用着AWS S3 REST API http docs aws amazon com AmazonS3 latest API APIRest html 在解决了一些令人烦恼的签名问题后 它似乎可以工作 但是 当我使用正确的 REST 动
  • 纯 Javascript 应用程序 + Amazon S3?

    我想确认或反驳以下内容 就我到目前为止所读到的内容而言 如果您需要拥有多个客户端 每个客户端都包含私有数据 则不可能仅使用 javascript 没有服务器端逻辑 编写由 Amazon S3 提供的 Web 应用程序 该应用程序也仅将数据存
  • 如何处理 AWS 中的开发和生产环境? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 构建要在生产中启动的应用程序 并不确定如何处理 AWS 上的开发 生产环境 如果我使用多个存储桶 多个 DynamoDB 表 多个 Lam
  • 当我加载 S3 上的 CSV 文件时,如何自动推断它们的架构?

    Context 目前我使用 Snowflake 作为数据仓库 使用 AWS 的 S3 作为数据湖 登陆 S3 的大部分文件都位于Parquet https parquet apache org 格式 对于这些 我正在使用 Snowflake
  • 使用 AWS Lambda 从 AWS S3 读取并提取巨大的 zip 文件

    我正在开发数据管理应用程序 客户可以上传zip file approx 250 MB 与多个text files approx 1500 MB on AWS S3 但由于记忆有限aws lamda 最大 1536MB 大小 我能够提取 50
  • 如何使用 aws-cli 访问 Google Cloud Storage 存储桶

    我可以访问 aws 和 Google Cloud Platform 是否可以执行以下操作 使用 aws cli 列出 Google Cloud Storage 存储桶 使用 aws cli 将 CSV 文件放入 Google Cloud S
  • 如何让AWS Lambda停止执行?

    我有一个AWSLambda 函数执行操作Kinesis Firehose 该函数使用退避机制 此时我认为这是浪费我的计算时间 但无论如何 在我的代码中的某个时刻 我希望执行失败 我应该使用什么命令来停止执行 附注 我发现有这样的命令 con
  • 使用 nginx 在云上部署 django 和 React

    我有一个 digitalocean 服务器 并且已经使用 Gunicorn 和 nginx 部署了 Django 后端服务器 如何在同一台服务器上部署 React 应用程序 您可以构建 React 应用程序并使用 Nginx 提供其静态文件
  • 同一区域内但属于不同账户的AWS数据传输费用如何?

    如果 S3 gt EC2 或 EC2 gt EC2 位于同一 AWS 区域 则数据传输费用似乎是免费的 S3价格注意事项 您需要为进出 Amazon S3 的所有带宽付费 except对于以下情况 当Amazon Elastic Compu

随机推荐

  • 在实体框架 5 中使用复杂类型的存储过程?

    我在 SQL Server 中有以下存储过程 ALTER PROCEDURE dbo FullTextSearchOnContent SearchText NVARCHAR 200 LanguageId INT ContentStatusI
  • 计算 UTF8 字符串的 MD5 哈希值

    我有一个 SQL 表 其中存储必须是唯一的大字符串值 为了确保唯一性 我在列上有一个唯一索引 在其中存储大字符串的 MD5 哈希值的字符串表示形式 保存这些记录的 C 应用程序使用以下方法进行哈希处理 public static strin
  • 使用 Swift 发送 HTML 电子邮件

    我想使用 Swift 从我的应用程序发送一封自动生成的带有 HTML 正文的电子邮件 这是我当前的代码 message Swift Message newInstance gt setFrom array email protected c
  • Kotlin 协程 `runBlocking`

    我正在学习 Kotlin 协程 我读过runBlocking是桥接同步和异步代码的方式 但如果runBlocking停止 UI 线程 例如 我需要在Android中查询数据库 val result Int get runBlocking q
  • 使用 Cython 包装 Windows 标准 API

    我想使用 cython 编写一个使用一些标准 Windows API 的扩展 作为第一步 我阅读了Windows 和宽字符 API http docs cython org en latest src tutorial strings ht
  • 将字符串拆分为具有多个单词边界定界符的单词

    我认为我想做的是一项相当常见的任务 但我在网上没有找到任何参考 我有带标点符号的文本 我想要一个单词列表 Hey you what are you doing here 应该 hey you what are you doing here
  • 等待大文件在 Excel 中打开

    我一直在尝试在 VBA 中循环处理一堆大的 csv 文件 每个大约 50MB 在每次迭代中 我都会打开一个新的 CSV 来操作数据 但是当 csv 打开时 会出现一条下载消息 指出文件正在打开 并且在 VBA 等待其完成时 进度条总是卡在某
  • 是否有更高级的 C# 控制台库? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何 NET 库可以 输出彩色字符 单词 在控制台中绘制进度条等内容 类似于 wget 我可能会
  • $project MongoDB 中的 $filter 使用 Spring Data

    我有一个子文档 它是父文档的数组 设备 在该数组中 我有一个属性 它是日期属性 我想按确定的日期找到包含子子文档的父文档 如下所示 id ObjectId 5818fa596969a1339093a7da fecha ISODate 201
  • malloc() 和 malloc_consolidate() 中的段错误

    当我查看 gdb 中的回溯时 我的应用程序有时会出现段错误 主要是在 malloc 和 malloc consolidate 中 我确认机器有足够的可用内存 它甚至没有开始交换 我检查了数据段和最大内存大小的 ulimit 两者都设置为 无
  • Android 字母部分列表视图,如联系人应用程序列表视图

    现在谁能帮我看看我的观点是这样的 请帮助我 我太混乱了 这是我的代码 电话簿列表视图 xml
  • 如何将本地角色与从 ansible-galaxy 加载的角色分开?

    我观察到从 Galaxy 下载的角色安装在roles 目录 我们已经有内部目录 因此很难区分外部目录和内部目录 有没有办法将它们保存在单独的目录中 这样我们就可以避免混淆 在大多数情况下 我希望有一个更新银河系脚本的脚本 并且我们不会在内部
  • Django表单错误列表渲染位置

    当我使用 f as p 显示有错误的表单时 错误列表 ul 始终首先出现 然后是标签和输入字段 例如 ul class errorlist li This field is required li ul p p
  • 如何将所有图像转换为 jpg?

    我有脚本
  • 使用 nltk.download() 下载错误

    我正在使用 Python 试验 NLTK 包 我尝试使用下载NLTKnltk download 我收到这样的错误消息 如何解决这个问题呢 谢谢 我使用的系统是VMware下安装的Ubuntu IDE是Spyder 使用后nltk downl
  • .NET Core 依赖注入 -> 获取接口的所有实现

    我有一个名为IRule以及实现该接口的多个类 我想使用 NET Core 依赖注入容器来加载所有实现IRule 所以所有的规则都被执行了 不幸的是我无法完成这项工作 我知道我可以注射IEnumerable
  • CORBA 与 Web 服务

    为什么 WebServices 比 CORBA 更具优势 我怀疑一切都是从防火墙问题开始的 CORBA 请求是二进制的 正常工作需要多个随机端口 因此 CORBA 请求和响应在第一次出现时会被防火墙阻止 HTTP 和 FTP 也使用虚拟端口
  • 在文本框中包含按钮

    我想补充一点Button 这会删除中的所有文本TextBox 是否可以将此 删除 按钮放入文本框中 就像在iPhone 文本框 我希望在你的帮助后它看起来像这样 我用控制模板玩了一些东西 但没有得到想要的结果 解决此问题的一种方法可能是使用
  • 如何管理多个 grails/groovy 版本的开发?

    我有一个使用 groovy 1 7 5 和 grails 1 3 4 的项目 但我的新项目尚未启动 它将使用最新版本的 groovy 1 8 6 和 grails 2 0 4 我将在这两个项目中工作 那么如何在Windows环境下管理不同版
  • 无法将带有 ACL 公共读取的文件上传到 Digital Ocean 空间

    我正在尝试从浏览器将图像上传到数字海洋空间 这些图像应该是公开的 我能够成功上传图像 然而 尽管 ACL 设置为public read 上传的文件始终是私有的 我知道它们是私有的 因为 a 仪表板显示权限是 私有 b 因为公共 URL 不起