[英]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.