python - 当文件在本地存储中时,如何使用 boto3 将文件上传到 s3
问题描述
我想做的是
首先,从用户那里获取作为 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 和烧瓶的东西很陌生,所以任何帮助都会很棒!提前致谢 :)
解决方案
嗯你是对的。我们需要提供需要上传的文件的路径。
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
让我知道这是否有帮助!
推荐阅读
- express - STRIPE“不能代表 Standard 和 Express 关联账户接受服务条款”
- sql - 在 PostgreSQL 查询的输出中获取重复值
- linux - 查找所有带有“异常”消息的 jvm 日志文件并列出 uniq 异常的计数
- python - 在 Python 控制台中捕获 Postgresql 函数返回字符串
- flutter - 如何停止在 Flutter Web 中缩小文本
- c - 为什么scanf会导致无限的forool
- for-loop - 为什么此代码段无法编译而 `print(square(3,0))` 可以?
- maven - Intellij MANIFEST.MF 无法解析 Main-Class 属性
- google-fit - 获取“消息”:“无权读取此私有数据源的数据。” 对于 TYPE_LOCATION_SAMPLE 和 TYPE_LOCATION_TRACK
- android-studio - CPU 不支持 VT-x 或 SVM(运行此 AVD 需要 Intel HAXM。)