在 AWS 上存储用户图像
Storing user images on AWS
我正在使用 ionic2 实现一个简单的应用程序,它调用使用 Flask 构建的 API。设置个人资料时,我会为用户提供上传自己图片的选项。
我想将它们存储在 S3 存储桶中并通过 CloudFront 为它们提供服务。
经过一番研究,我只能找到以下信息:
- 正在使用 python 从本地存储上传图像。
- 正在使用 javascript 从 HTML 文件选择器上传图像。
当你有一个前端与 API 交互时,我找不到任何关于如何处理 blobs/files 的信息。当我开始研究时,我想到的选项是:
- Post 将文件发送到客户端的 Amazon 并 return
CloudFront url 直接到后端。我不太热衷于此
一个是因为它涉及在
客户端(也许不是那么危险,但我宁愿拥有它
在后端)。
- 将图像上传到服务器并以某种方式告诉后端
我们希望后端选择哪个文件。我不太热衷
这种方法要么是因为客户需要有知识
关于服务器本身(不仅是 API)。
- 图片编码(我有base64,但是没有
示例我认为这是完全错误的)并且 post 它到后端,
它将处理所有 S3 upload/store CloudFront URL.
我觉得所有这些方法都是完全错误的,但我想不出(或找不到)什么是正确的做法。
我该如何处理?
让服务器生成 pre-signed URL 供客户端上传图像。这意味着服务器控制着 URL 的外观并且它不会暴露任何秘密,但客户端可以将图像直接上传到 S3。
Generating a pre-signed URL in Python using boto3 看起来像这样:
s3 = boto3.client('s3', aws_access_key_id=..., aws_secret_access_key=...)
params = dict(Bucket='my-bucket', Key='myfile.jpg', ContentType='image/jpeg')
url = s3.generate_presigned_url('put_object', Params=params, ExpiresIn=600)
ContentType
是可选的,客户端在上传到 url
时必须设置相同的 Content-Type
HTTP header;如果已知,我发现限制允许的文件类型很方便。
我正在使用 ionic2 实现一个简单的应用程序,它调用使用 Flask 构建的 API。设置个人资料时,我会为用户提供上传自己图片的选项。 我想将它们存储在 S3 存储桶中并通过 CloudFront 为它们提供服务。
经过一番研究,我只能找到以下信息:
- 正在使用 python 从本地存储上传图像。
- 正在使用 javascript 从 HTML 文件选择器上传图像。
当你有一个前端与 API 交互时,我找不到任何关于如何处理 blobs/files 的信息。当我开始研究时,我想到的选项是:
- Post 将文件发送到客户端的 Amazon 并 return CloudFront url 直接到后端。我不太热衷于此 一个是因为它涉及在 客户端(也许不是那么危险,但我宁愿拥有它 在后端)。
- 将图像上传到服务器并以某种方式告诉后端 我们希望后端选择哪个文件。我不太热衷 这种方法要么是因为客户需要有知识 关于服务器本身(不仅是 API)。
- 图片编码(我有base64,但是没有 示例我认为这是完全错误的)并且 post 它到后端, 它将处理所有 S3 upload/store CloudFront URL.
我觉得所有这些方法都是完全错误的,但我想不出(或找不到)什么是正确的做法。
我该如何处理?
让服务器生成 pre-signed URL 供客户端上传图像。这意味着服务器控制着 URL 的外观并且它不会暴露任何秘密,但客户端可以将图像直接上传到 S3。
Generating a pre-signed URL in Python using boto3 看起来像这样:
s3 = boto3.client('s3', aws_access_key_id=..., aws_secret_access_key=...)
params = dict(Bucket='my-bucket', Key='myfile.jpg', ContentType='image/jpeg')
url = s3.generate_presigned_url('put_object', Params=params, ExpiresIn=600)
ContentType
是可选的,客户端在上传到 url
时必须设置相同的 Content-Type
HTTP header;如果已知,我发现限制允许的文件类型很方便。