问题标签 [digital-ocean-spaces]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
130 浏览

vb.net - 列出超过 1000 个对象键的问题 - AWS-S3 - VB .net

出于某种原因,即使在使用延续令牌分配实现循环以继续列出之后,下面的代码也不会列出超过 1000 个对象,这告诉 ListObjectsV2Request 仅在 IsTruncated 为真时才继续和停止。我的存储桶有 33,000 个对象,即使前缀和键是空字符串,结果总是返回 1000 个对象。谁能帮我理解为什么我总是得到 1000 个对象?标记,适用于旧版本的 Amazon SDK。

0 投票
0 回答
78 浏览

node.js - Digital Ocean 空间使用 AWS s3 nodejs SDK 更新 ACL

我正在尝试在数字海洋空间上使用 nodejs 将 ACL 从私有更新为公共读取(反之亦然)。文件已经上传到存储桶......(我已经看到很多使用 putObject 在上传时设置它的示例,但在上传后没有设置它)

文件存储在文件夹中,例如

最好,我希望能够仅使用folder1/前缀更新文件,而不是一一手动更新它们。

我使用的是 aws s3 包,但我是 aws 新手,谁能帮我提供一些示例代码来做到这一点?

0 投票
0 回答
127 浏览

flutter - 使用 Flutter 将文件上传到 Digital Ocean Spaces 时如何获取进度信息

我正在尝试使用 Digital Ocean Spaces 作为我的 Flutter 应用程序的文件存储。作为 API 助手,我正在使用包miniohttps://pub.dev/packages/minio)。

一般来说,我可以开始上传和下载操作。但我找不到获取进度信息的方法。

我试图设置这样的存储桶事件:

但是这个监听器不会触发。然后在这里我发现Digital Ocean不支持Bucket Informations:https ://developers.digitalocean.com/documentation/spaces/

使用 Digital Ocean 存储时,有没有办法获得上传进度?谢谢你的帮助!

0 投票
0 回答
36 浏览

html - 如何使用 URI 接收 jpg 文件作为图像?

这应该是相对基本的,但我意识到我实际上并不了解这样做的标准方式。我希望在我的 Vue 网页中显示一张图像,该网页由 DigitalOcean 的Spaces工具提供,使用保存在我的数据库中的href/ 。URI

如果你不熟悉Spaces,它只是一个文件存储系统,和亚马逊的 S3 完全一样。所以,假设我jpg保存了一个文件,可以通过地址访问

如果我在浏览器中输入此 URI,浏览器将提供将此文件保存到我的本地计算机。如果我这样做,那就是 jpg - 很好。但我真正想要的是让浏览器简单地显示图像。

无论哪种方式,浏览器都在下载图像文件,对吧?但是为什么有些图像只是自动显示,而有些只是作为通用文件提供?

我不知道这是否是在提供图像的方式或接收图像的方式中要解决的问题,但我想要做的是将 URI 添加到我的 Vue 组件的 html 中的图像标签中,就像这样

它是如何工作的?

0 投票
0 回答
101 浏览

node.js - AWS v2 和 v4 签名 URL

我正在使用节点 aws sdk 为 s3 对象生成 v2 签名的 url,我有几个问题。这些文件是使用数字海洋而不是亚马逊托管的。

  1. 我想向 URLS 添加自定义获取参数。我找到了建议您可以使用 v4 签名的文档,但我想使用 v2。我尝试在生成后将 get 参数附加到 url,这似乎工作正常,我是否遗漏了一些可能导致执行此操作的问题。我找到的文档:https ://github.com/aws/aws-sdk-js/issues/3656

  2. 我不想使用 v4 的原因是因为 v4 签名包括生成 url 的日期/时间。有没有办法删除这个参数并仍然使用 v4?

  3. 我还读到 v2 签名已被弃用。我注意到我使用的方法是同步的getSignedUrl(),因此不会发出任何 http 请求来生成链接。因为这不需要外部数据/代码是否可以安全地假设如果我选择 v2 签名它们将在可预见的未来工作?

非常感谢

0 投票
0 回答
64 浏览

laravel - 如何防止文件在数字海洋空间上公开?

大家好,我在 Digital Ocean 上想阻止我的文件公开。

首先。我像这样设置 .env 文件

然后我设置 config->filesystem.php

之后让控制器存储文件

在我的刀片模板上,我像这样检索文件

当我没有将可见性设置为公开时,这就是我得到的

如果我将 filesystem.php 中的可见性设置为公开。我可以在没有身份验证的情况下查看文件。

提前感谢您的任何帮助或建议。

0 投票
0 回答
177 浏览

python - 如何从 Django 中的自定义存储中下载图像或文件?

我在 Django 中创建了一个图像共享网站,我将缩略图文件保存在服务器上,将原始文件保存在对象存储中。我能够上传图像(对象存储上的原始图像和服务器上的缩略图)。但是,问题是我无法从对象存储中下载图像。

有什么方法可以从对象存储中下载图像。

这是我的代码。

我的 settings.py :

模型.py

custom_storages.py - 使用它来将我的文件存储在对象存储中

views.py - 单击下载按钮时,调用此函数

调用下载函数时,显示错误,因为 media_root 设置为服务器位置。有没有可能使用 DEFAULT_FILE_STORAGE 和 MEDIA_ROOT 来下载对象存储中的图像。或者我如何修改我的下载代码,以便它从对象存储中下载图像。任何帮助表示赞赏。谢谢!

0 投票
0 回答
65 浏览

php - Digital Ocean Spaces (AWS S3) 上的内存大小耗尽错误

运行 AWS S3 客户端功能似乎对我有问题,并且占用了大量内存(生成“已用尽 3670016000 字节的允许内存大小”)。我在下面有以下代码片段

我尝试过的事情:

  1. 将版本设置为“2006-03-01”
  2. 放置错误端点(这会导致主机错误输出)
  3. 不同的区域(区域错误输出)

考虑到配置更改时的响应,我会假设客户端实例运行良好

我目前有 2 个空间(1 个是空的,1 个有大约 60gb 的文件 - 两者都在同一个区域和帐户中)

编辑:在 AWS S3 配置上打开调试模式后,我得到以下响应

-> 进入 step init,名称 'idempotency_auto_fill' ---------------------------------------- ----------- 命令设置为 array(3) { ["instance"]=> string(32) "000000007fb4cf920000000012b9d6de" ["name"]=> string(11) "ListBuckets" [" params"]=> array(2) { ["@http"]=> array(1) { ["debug"]=> resource(307) of type (stream) } ["@context"]=> array( 0) { } } } 请求设置为 array(0) { } -> 进入 step init, name 's3.ssec' ---------------------- --------------- 没有变化 -> 进入步骤初始化,名称 's3.source_file' --------- ----------------------- 没有变化 -> 进入步骤初始化,名称 's3.save_as' ------------- --------------------------- 无变化 -> 进入步骤 init,名称为 's3.location' ----------------------------------------- 没有变化 -> 进入 step init , 名称 's3.auto_encode' ------------------------------------------- - 没有变化 -> 进入 step init, name 's3.head_object' ------------------------------------ --------- 无变化 -> 进入验证步骤,名称为“验证” ----------------------------- --------------- 无变化 -> 进入验证步骤,名称为 'input_validation_middleware' ------------ -------------------------------------- 无更改 -> 进入步骤构建,名称为 'builder' -------------------------------------- request.instance 设置为 000000007fb4cf300000000012b9d6de request.method 已设置将 GET request.headers 设置为 array(1) { ["X-Amz-Security-Token"]=> string(7) "[TOKEN]" } 请求。路径设置为 sgp1.digitaloceanspaces.com -> 进入步骤构建,名称为 'ApiCallMonitoringMiddleware' ------------------------------- --------------- 无更改 -> 进入步骤构建,名称 '' ------------ ------------------- request.instance 从 000000007fb4cf300000000012b9d6de 更改为 000000007fb4cf2c0000000012b9d6de request.headers.User-Agent 设置为 array(1) { [0]=> string(56 ) "aws-sdk-php/3.178.6 OS/Linux/3.10.0-1127.19.1.el7.x86_64" } -> 进入步骤构建,命名为 'endpoint_parameter' ------------ ------------------------------------- 无变化 -> 进入步骤构建,名称为 's3.checksum ' ------------------------------------------ 无变化 -> 进入步骤构建, 名称 's3.content_type' ------------------------------- --- 没有变化 ->进入step build,name 's3.endpoint_middleware' ---------------------------------------- ------------- 没有变化 -> 进入步骤构建,名称 's3.bucket_endpoint_arn' ------------------------ ------------------ 无变化 -> 输入步骤符号,名称为 'StreamRequestPayloadMiddleware' -------- -------------------------------------------------- -- 无变化 -> 输入步骤符号,名称为 'invocation-id' ---------------------------------- --------- request.instance 从 000000007fb4cf2c0000000012b9d6de 更改为 000000007fb4cf280000000012b9d6de request.headers.aws-sdk-invocation-id 设置为 array(1) { [0]=> string(32) "03e4030ef1f4fd18f7d38" > 输入步号,命名为'retry' ------------------------------------ 请求。实例从 000000007fb4cf280000000012b9d6de 更改为 000000007fb4cf270000000012b9d6de request.headers.aws-sdk-retry 设置为 array(1) { [0]=> string(3) "0/0" } -> Entering step sign, name 'signer' -- ---------------------------------- request.instance 从 000000007fb4cf270000000012b9d6de 更改为 000000007fb4cf340000000012b9d6de request.headers.x-amz- content-sha256 设置为 array(1) { [0]=> string(64) "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } request.headers.X-Amz-Date 设置为 array(1) { [0]=> string(16) “20210423T110304Z”} request.headers.Authorization 设置为 array(1) { [0]=> string(211) “AWS4-HMAC-SHA256 Credential=[KEY]/20210423/ap-southeast-1/s3/aws4_request, SignedHeaders=x-amz-content-sha256;x-amz-date,签名=[SIGNATURE] } ->输入步号,名称 's3.put_object_url' ---------------------------------------- -------- 没有变化 -> 输入步骤符号,名称 's3.permanent_redirect' ----------------------------- ---------------------- 无更改 -> 输入步骤尝试,名称为 'ApiCallAttemptMonitoringMiddleware' ---------------- -------------------------------------------------- - 没有变化 * 正在尝试 103.253.144.208:80... * 连接到 sgp1.digitaloceanspaces.com (103.253.144.208) 端口 80 (#0) > GET / HTTP/1.1 主机:sgp1.digitaloceanspaces.com aws-sdk-invocation -id: 03e4030ef1f4fd18f7d38b8265b34b7f aws-sdk-retry: 0/0 x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 X-Amz-Date: 20210423T110304Z Authorization: AWS4-HMAC-SHA256 Credential=[KEY]/20210423/ap-southeast-1/ s3/aws4_request,SignedHeaders=x-amz-content-sha256;x-amz-date, Signature=[SIGNATURE] 用户代理:aws-sdk-php/3.178.6 OS/Linux/3.10.0-1127.19.1.el7.x86_64 GuzzleHttp /7 * 将捆绑包标记为不支持多用途 < HTTP/1.1 302 找到 < 内容长度:0 < 位置:https://sgp1.digitaloceanspaces.com/< cache-control: no-cache < * 连接到主机 sgp1.digitaloceanspaces.com 的连接 #0 保持不变 * 正在尝试 103.253.144.208:443 ... * 连接到 sgp1.digitaloceanspaces.com (103.253.144.208) 端口 443 (#1 ) * ALPN,提供 http/1.1 * 成功设置证书验证位置:* CAfile:/etc/pki/tls/certs/ca-bundle.crt * CApath:无 * SSL 连接使用 TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN,服务器完成不同意协议 * 服务器证书:* 主题:C=US;ST=纽约;L=纽约;O=数字海洋有限责任公司;CN=*.sgp1.digitaloceanspaces.com * 开始日期:格林威治标准时间 2020 年 11 月 6 日 00:00:00 * 到期日期:格林威治标准时间 2021 年 12 月 7 日 23:59:59 * subjectAltName:主机“sgp1.digitaloceanspaces.com”匹配证书的“sgp1 .digitaloceanspaces.com" * 发行人:C=US;O=DigiCert 公司;CN=DigiCert TLS RSA SHA256 2020 CA1 * SSL 证书验证正常。> GET / HTTP/1.1 Host: sgp1.digitaloceanspaces.com aws-sdk-invocation-id: 03e4030ef1f4fd18f7d38b8265b34b7f aws-sdk-retry: 0/0 x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 X-Amz-Date: 20210423T110304Z User-Agent: aws-sdk-php/3.178.6 OS/Linux/3.10.0-1127.19.1.el7.x86_64 GuzzleHttp/7 * 旧 SSL 会话 ID 已过时,正在删除 * 将捆绑包标记为不支持多用途 < HTTP/1.1 200 OK <日期:格林威治标准时间 2021 年 4 月 23 日星期五 11:03:07 < 内容长度:215 < 内容类型:文本/xml;charset=utf-8 < 严格传输安全:max-age=15552000;包括子域;preload < * 到主机 sgp1.digitaloceanspaces.com 的连接 #1 保持不变 <- 离开步骤尝试,名称为“ApiCallAttemptMonitoringMiddleware”

0 投票
0 回答
283 浏览

amazon-s3 - 通过 Haproxy 反向代理 S3 存储桶

我正在尝试使用 Haproxy(特别是 Haproxy Ingress)为我的 S3 存储桶(我正在使用 DigitalOcean Spaces)设置反向代理。

经过一些试验和错误,我得到了代理的某个地方,但它还不能正常工作。
GET 请求工作正常,但是,PUT 请求(如 putObject)不起作用,因为我收到错误“403 - SignatureDoesNotMatch”。不幸的是,我似乎无法找到原因,并且我已经进行了广泛的搜索。

我现在的后端如下:

尝试仅使用“.ams3.digitaloceanspaces.com”来推翻服务器,但这没有用。

我认为这与标题有关,但我尝试添加“授权”和“连接”标题,但它们似乎都不起作用。

我也在使用后端协议“h2-ssl”,因为没有它,它就不能代理。

提前致谢!


取得了一些进展,签名版 v4 不起作用,但 v2 可以。
但是,如果我是正确的,docker 注册表使用 v4,我希望它与最新标准兼容。

我对 S3 了解不多,我目前正在阅读有关身份验证差异的文档,但欢迎提供任何帮助!


所以,经过一番调查,签名版本 v4 使用请求 URI 来计算签名。当存储桶本身计算相同的签名时,请求 URI 是不同的,因为它侦听另一个 URI。

我见过一些人在 nginx 处理请求时使用 nginx 重新计算签名,但还没有找到在 Haproxy 中执行此操作的方法。

现在最好的方法是使用签名版本 v2,但是,对于大多数 S3 存储桶提供商来说,它可能已被弃用。

0 投票
0 回答
124 浏览

go - 限制rabbitmq每秒出队的任务

我在 RabbitMQ 中有一个消费者-生产者方式的队列,它可以作为基本的循环队列正常工作。

我的问题是我试图限制每秒处理的请求数,因为当我使一个项目出队时,我向一个 DO 空间发出请求,如果我在一秒钟内发出 750 个或更多请求,它将阻止我的 IP。我使用 goroutines 来同时出列项目,但我只想每秒一次出列 500 个项目以避免达到该限制。这需要考虑当前正在出队的项目(即我不能只从队列中拉出 500 个项目然后延迟到下一秒),基本上在它运行出队代码之前,它需要等待以确保有在那一秒内出列的请求还没有超过 500 个。到目前为止我有这段代码,但它似乎不能正常工作(注意我正在测试每秒 2 个请求,而不是现在的 500 个)。它每隔一段时间就会有很长的延迟(比如 20 多秒),我不确定它是否正确计算了限制。请注意,我很确定 prefetch 选项不是我在这里需要的,因为它限制了每秒传入的消息数量,这里我只想限制每秒同时出队的消息。