我正在使用Chalice框架创建API服务。我的用户需要上传图像,然后将图像保存到s3存储桶。
用户应如何将图像上载到我的端点,端点收到后应如何处理?
到目前为止,这是我的思考过程:
BUCKET = <bucket_name>
@app.route('/n_number_search/', methods=['POST'])
def n_number_search():
body = app.current_request.raw_body
s3_client.upload_file(body, BUCKET, UUID_file_name)
return Response(body=f'upload successful: {}', status_code=200,
headers={'Content-Type': 'text/plain'})
这是行不通的。我已经查看了flask中执行此操作的方法,但是语法由于烧瓶具有request.files
属性而略有不同。
一种好的做法是使用预签名的URL。这是高级过程:
优点是:
通过不上传两次(一次到Lambda,第二次到S3)来减少网络延迟。
降低您的Lambda费用:生成预签名URL比等待上传要快得多,因此要便宜得多;
消除上载失败:Lambda超时为5分钟,如果上载花费更多时间(如果文件太大或您的用户的互联网连接不良,可能会发生),它将失败。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句