繁体   English   中英

使用 boto3 将 XML 文件上传到 s3 存储桶

[英]Uploading an XML file to a s3 bucket with boto3

我正在尝试使用 lambda function 和 HTTP 请求将 XML 文件上传到 AWS 的 s3 存储桶。 主要问题是我无法转换由 HTTP 请求正文传递的 XML 文件。

import json
import boto3

s3 = boto3.client('s3')

def lambda_handler(event, context):
    bucket = 'xmlresultmarco'
    
    fileName = 'Test'+'.xml'
    
    uploadByteStream = event

    try:
        s3.put_object(Bucket = bucket, Key = fileName, Body = uploadByteStream )
        return "Upload completed"
    
    except Exception as e:
        return e
        raise e

有人可以帮助我吗?

这里有一些代码可以帮助您入门。

lambda function 的定义可能看起来像这样。

def download_lambda(event, context):
    url = event['url']
    bucket = event['bucket_name']
    key = event['key']
    download_url(url, bucket_name=bucket, key=key)

然后下载 function 可能看起来像这样。 我使用 multi-part 来处理大文件。

def download_url(url, bucket_name, key):
    response = requests.get(url, stream=True)
    response.raise_for_status()
    assert response.status_code == 200
    obj = s3.Object(bucket_name, key)
    multi_part_upload = obj.initiate_multipart_upload()
    partNo = 1
    parts = []
    default_chunk_size = 1024*1024*10 # Must be at least 5mb
    for chunk in response.iter_content(chunk_size=default_chunk_size):
        if chunk:
            part = multi_part_upload.Part(partNo)
            response = part.upload(Body=chunk)
            parts.append({
                'PartNumber': partNo,
                'ETag': response['ETag']
            })
            partNo += 1
    part_info = {}
    part_info['Parts'] = parts
    multi_part_upload.complete(MultipartUpload=part_info)

很明显,根据马克的观点,我在这里没有处理任何 XML 转换。 您需要在阅读文件时弄清楚这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM