Я хочу сделать линк для загрузки сохраненного файла S3.
<a href="https://s3.region.amazonaws.com/bucket/file.txt" download>DownLoad</a>
он отображает только file.txt
в браузере.
Так что я нашел способ скачать. Это добавить Content-Disposition : attachment
метатег в файл.
Но мне нужно автоматически добавить этот метатег в новый файл. Итак, я сделал lambda function
с помощью Python.
import json
import urllib.parse
import boto3
print('Loading function')
s3 = boto3.client('s3')
def lambda_handler(event, context):
#print("Received event: " + json.dumps(event, indent=2))
# Get the object from the event and show its content type
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
try:
response = s3.get_object(Bucket=bucket, Key=key)
print("CONTENT TYPE: " + response['ContentType'])
except Exception as e:
print(e)
print('Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket))
raise e
try:
s3_2 = boto3.resource('s3')
s3_object = s3_2.Object(bucket, key)
print(s3_object.metadata)
s3_object.metadata.update({'ContentDisposition':'attachment'})
print(bucket, key)
s3_object.copy_from(CopySource={'Bucket':bucket, 'Key':key}, Metadata=s3_object.metadata, MetadataDirective='REPLACE')
except:
print(s3_object.metadata)
return response['ContentType']
Но эта функция добавляет user defined metatag
, а не system metatag
. , ,
Что мне делать?