2

我正在为备份服务创建一个 REST API,原则上这很简单:

  • 用户被某些人识别uid
  • 文件由一些标识fid
  • 上传文件,用户POSTsa 文件到/backups/<uid>并返回位置
  • 列出文件,返回用户GETs/backups/<uid>和 s 的一些索引fid
  • 要下载文件,用户从索引GETs/backup/<uid>/<fid>中选择一个,然后返回文件。

现在,我想通过将上传和下载委托给 Amazon S3 之类的服务来大大减少到我的服务器的流量。

重定向下载不是问题,因为我可以执行常规重定向(301307?)到一些生成的过期 URL。

但是上传怎么办?我希望有这样的东西:

  • 用户(不知道 S3)开始POST向我的服务器发送文件
  • 服务器只接收标题(不是整个文件!)
  • 服务器在 S3 中确定一个位置,生成一个过期 URLPUT并重定向到它
  • 客户端PUT将文件发送到服务器传递给它的 URL
  • 服务器收到上传成功的通知

关键是这一切都需要对用户尽可能透明。

4

1 回答 1

2

我不认为最初的 POST 应该包括整个实体。相反,POST 必须明确地是对要创建的“上传存储桶”资源的请求。然后,您只需使用 响应 POST 请求201 CreatedLocation标头指向应上传文件的新资源。

如果选择的上传存储桶必须取决于文件的细节(文件大小、类型),那么我会让客户端在 POST 正文中提交元数据。

于 2013-05-19T13:29:53.307 回答