Я пытаюсь создать службу RESTful в веб-службе Amazon с помощью API Gateway и Lambdas. Один из методов API Gateway предназначен для возврата одной записи из таблицы DynamoDB соответствующего ресурса из S3. Этот ресурс является XML-файлом, но я не знаю, как вернуть это содержимое из функции Lambda таким образом, чтобы он служил загружаемым файлом. Я использую Python для кодирования лямбды, и до сих пор это выглядит следующим образом:Python aws-lambda возвращает xml-файл в aws-api-gateway
import json
from lxml import etree
def get_item_handler(event, context):
# Validate request
# ...
# End validation
logger.info('Querying by id:{0}'.format(event["id"]))
query_kwargs = {
'Select': "ALL_ATTRIBUTES",
'Limit': event["PageSize"] if "PageSize" in event else settings.DEFAULT_PAGE_SIZE,
'KeyConditionExpression': Key('id').eq(event["id"])
}
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(settings.TABLE_NAME)
response = table.query(**query_kwargs)
if "format" in event and event["format"] and response["Items"]:
response_format = event["format"].lower()
item = json.loads(json.dumps(response['Items'], cls=DecimalEncoder))[0]
if response_format == "xml":
s3_path = get_item_path(item) # Form path to the item in S3
resource = os.path.join(s3_path , item["resource"])
local_file = '/tmp/{0}'.format(item["resource"])
s3_client = boto3.client('s3')
transfer = S3Transfer(s3_client)
transfer.download_file(settings.BUCKET_NAME, resource, local_file)
xml = etree.parse(local_file)
return etree.tostring(xml)
return json.dumps(response['Items'], cls=DecimalEncoder)
API-интерфейс шлюз устанавливается в приложении/XML, и он возвращает строку с содержимым XML, но это не что я хочу, мне нужно вернуть XML как файл.
Как установить Content-Disposition ?, Я только нахожу параметр Content-Type. благодаря – Yasel