我正在创建一个网页,用户可以点击不同的链接,这将下载文件,范围从1兆字节到300兆以上。这些链接向API网关端点执行GET请求,后者从S3下载相应的文件。我当前正在使用以下代码:
def files_download(event, context):
try:
key = event['queryStringParameters']['key']
# name = event
except Exception as e:
return client_failure('Key field required as query parameter', e)
try:
file = s3.Object('XXXXX', key)
return success_file('text/csv', key, file.get()['Body'].read())
except Exception as e:
return server_failure('Failed to retrieve file', e)
def success_file(content_type, attachment_name, data):
return {
'isBase64Encoded': False,
'statusCode': 200,
'headers': {
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials' : True,
'Content-Disposition': 'attachment; filename=' + attachment_name
},
'body': data
}
def success(data):
return {
'isBase64Encoded': False,
'statusCode': 200,
'headers': {
'Content-Type': 'application/json',
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials' : True
},
'body': json.dumps({
'data': data
}, cls=DecimalEncoder)
}
def server_failure(message, details):
return {
'isBase64Encoded': False,
'statusCode': 500,
'headers': {
'Content-Type': 'application/json',
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials' : True
},
'body': json.dumps({
'message': message,
'details': str(details)
}, cls=DecimalEncoder)
}
def client_failure(message, details):
return {
'isBase64Encoded': False,
'statusCode': 400,
'headers': {
'Content-Type': 'application/json',
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials' : True
},
'body': json.dumps({
'message': message,
'details': str(details)
}, cls=DecimalEncoder)
}
但是,对于大文件(大于100 MB),这似乎失败。有没有办法让它工作,或者有更好的方法让用户下载文件?我曾考虑过将我的S3存储桶公开并提供直接链接,但显然这对于身份验证来说并不理想。在
目前没有回答
相关问题 更多 >
编程相关推荐