Dropline下载

Amazon S3

引擎: S3 兼容(AWS SigV4) · 预设: Amazon S3

配置

设置 → 图床 → + → Amazon S3。

字段 值
Endpoint 留空 —— Dropline 会自动用 https://s3.<region>.amazonaws.com
Region 桶所在的 region,一字不差:us-east-1、eu-central-1、ap-northeast-1
Bucket 只填桶名,例如 my-assets
Access Key ID IAM 用户的 AKIA…
Secret Access Key 对应的密钥 —— 存进钥匙串
公开访问前缀 可选。有 CloudFront 的话填它的域名
对象键模板 images/{{date}}/{{uuid}}.{{ext}}

region 必须和桶一致。 AWS 会把 region 编进签名里校验,不一致的结果是 SignatureDoesNotMatch,而不是重定向。在 S3 控制台的桶列表里能看到。

创建存储桶

  1. S3 控制台 → 创建存储桶,起名字、选 region。
  2. 在 阻止公共访问里,如果你想让裸链接能在浏览器里打开,就取消勾选「阻止所有公共访问」。如果打算只走 CloudFront + OAC,那就保持开启。
  3. 创建。

一个最小权限的 IAM 用户

给 Dropline 一把只能写对象、别的什么都干不了的钥匙。IAM → 用户 → 创建用户,不给控制台访问权限,然后挂一条内联策略:

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DroplineUpload",
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-assets/images/*"
    }
  ]
}

然后安全凭证 → 创建访问密钥 → 在 AWS 外部运行的应用程序。密钥只显示一次。

注意 Resource 的前缀和键模板是对齐的。改一个就要改另一个。

让对象可读

要让 https://…amazonaws.com/… 这样的裸链接能打开,对象必须可公开读取。常规做法是一条桶策略:

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadImages",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-assets/images/*"
    }
  ]
}

这只给这个前缀开放了读权限;写仍然需要 IAM 密钥。

你拿到的链接

公开访问前缀留空时,Dropline 返回它上传用的那个 path-style URL:

text
https://s3.eu-central-1.amazonaws.com/my-assets/images/2026/08/19/a1f3….png

能用,但很长,暴露了桶名,而且没有缓存。前面挂一个 CloudFront,把公开访问前缀设成分发的域名:

text
https://cdn.example.com

链接就变成:

text
https://cdn.example.com/images/2026/08/19/a1f3….png

Dropline 只用一个 / 把前缀和 key 接起来,不做别的处理。所以如果你的分发把桶挂在某个子路径下,前缀里要带上这个子路径。

CORS

只有浏览器用 JavaScript 去取这些文件时才需要 —— 普通的 <img> 标签不需要 CORS。确实需要的话:

json
[
  {
    "AllowedHeaders": ["*"],
    "AllowedMethods": ["GET"],
    "AllowedOrigins": ["https://example.com"],
    "MaxAgeSeconds": 3600
  }
]

Dropline 本身是原生应用,完全不受 CORS 约束。

验证

点测试上传。成功后在浏览器里打开返回的 URL —— 这一步同时验证了写入路径和读取路径。如果上传成功但浏览器里 404,说明对象不是公开的,或者前缀不对,见疑难排查。

常见问题

现象 原因
SignatureDoesNotMatch region 和桶对不上,或者密钥里混进了空白字符
HTTP 403 但没提签名 IAM 策略没允许该前缀下的 s3:PutObject
HTTP 404 桶名写错,或者它在另一个 region
上传成功但链接 404 「阻止公共访问」还开着,或者没配桶策略
本页目录