我正在为备份服务创建一个 REST API,原则上这很简单:
- 用户被某些人识别
uid; - 文件由一些标识
fid; - 上传文件,用户
POSTsa 文件到/backups/<uid>并返回位置 - 列出文件,返回用户
GETs/backups/<uid>和 s 的一些索引fid - 要下载文件,用户从索引
GETs/backup/<uid>/<fid>中选择一个,然后返回文件。
现在,我想通过将上传和下载委托给 Amazon S3 之类的服务来大大减少到我的服务器的流量。
重定向下载不是问题,因为我可以执行常规重定向(301或307?)到一些生成的过期 URL。
但是上传怎么办?我希望有这样的东西:
- 用户(不知道 S3)开始
POST向我的服务器发送文件 - 服务器只接收标题(不是整个文件!)
- 服务器在 S3 中确定一个位置,生成一个过期 URL
PUT并重定向到它 - 客户端
PUT将文件发送到服务器传递给它的 URL - 服务器收到上传成功的通知
关键是这一切都需要对用户尽可能透明。