簡體   English   中英

當文件在本地存儲中時,如何使用 boto3 將文件上傳到 s3

[英]how to upload file to s3 with boto3, while the file is in localstorage

我想做的是

首先,從用戶那里獲取輸入作為 excel 表單

其次,用python代碼處理它,

第三,使用boto3將其上傳到aws s3

但是我在上傳到 s3 時遇到了問題

s3 = boto3.client(
"s3",
aws_access_key_id=access_key,
aws_secret_access_key=secret_key
)
bucket_resource = s3

我首先創建了 s3 對象,然后

        excel_file = pd.read_excel(file.stream)
    try:
        result = compute.select_bestitem(excel_file, brand_name, col_name, methods, operator, value)
        filename = secure_filename(file.filename)
        bucket_resource.upload_file(
            Bucket=bucket_name,
            Filename=,
            Key=filename
        )

我已經得到文件為 file = request.files['file'],並將它傳遞給我之前定義的函數

現在,我想上傳到 S3 的文件是 'result object' ,這是 select_bestitem 函數的結果

但我不知道傳遞給 Filename 參數的是什么

好像我必須給它提供文件路徑,但我找不到存儲在localstorage中的文件的路徑

另外,即使我傳遞了正確的文件路徑,我也不確定它是否有效,因為文件的類型

我正在嘗試上傳字符串

(我使用 Pandas to_csv 命令創建了“結果”對象,看起來 boto3 以某種方式拒絕了這種類型)

我對python和flask的東西很陌生,所以任何幫助都會很棒! 提前致謝 :)

嗯你是對的。 我們需要提供需要上傳的文件的路徑。 request.files['file']給出文件指針,使用該指針,您可以將文件保存到某個位置。 保存文件的路徑可以使用os.path.join(UPLOAD_FOLDER, f.filename) ,如下所示:

@app.route("/upload", methods=['POST'])
def upload():
    if request.method == "POST":
        f = request.files['file']
        file_path=os.path.join(UPLOAD_FOLDER, f.filename) # path where file can be saved
        f.save(file_path)
        upload_file(file_path, BUCKET) # send the file path
        return redirect("/storage")

之后,可以看出,我調用了upload_file方法,該方法將寫入s3,該函數的代碼如下:

BUCKET = "flaskdrive"
AWS_ACCESS_KEY="aws_access_key"
AWS_SECERT_KEY="aws_secret_key"

def upload_file(file_name, bucket):
    """
    Function to upload a file to an S3 bucket
    """
    object_name = file_name
    s3_client = boto3.client('s3',
                             aws_access_key_id=AWS_ACCESS_KEY,
                             aws_secret_access_key=AWS_SECERT_KEY)
    response = s3_client.upload_file(filename=file_name, bucket=bucket, key=object_name)

    return response

讓我知道這是否有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM