You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python应用上传文件至MinIO Bucket出现空文件问题求助

解决MinIO Python上传文件大小为0的问题

问题根源

上传后文件大小为0,核心原因是Flask的FileStorage对象指针不在文件起始位置。当你获取file.content_length后,文件指针可能已移动到末尾,导致put_object读取时没有内容可上传。

解决方案

方案一:重置文件指针(推荐)

在调用minio_client.put_object前,添加file.seek(0)将文件指针重置到起始位置,确保完整读取文件内容。修改后的核心代码如下:

@app.route('/', methods=['GET', 'POST'])
@app.route('/home', methods=['GET', 'POST'])
def home():
    form = UploadFileForm()
    if form.validate_on_submit():
        file = form.file.data
        filename = secure_filename(file.filename)
        bucket_name = "saving-files" 
        try:
            content_type = get_content_type(filename)
            # 关键:重置文件指针到起始位置
            file.seek(0)
            minio_client.put_object(bucket_name, filename, file, file.content_length, content_type=content_type)
            return "File has been uploaded to MinIO."
        except S3Error as e:
            return f"Error uploading file to MinIO: {e}"

    return render_template('index.html', form=form)

方案二:改用upload_file方法

如果你不想手动处理指针,可使用MinIO的upload_file方法,该方法会自动处理文件读取逻辑,需要先将文件临时保存:

import tempfile

@app.route('/', methods=['GET', 'POST'])
@app.route('/home', methods=['GET', 'POST'])
def home():
    form = UploadFileForm()
    if form.validate_on_submit():
        file = form.file.data
        filename = secure_filename(file.filename)
        bucket_name = "saving-files" 
        try:
            content_type = get_content_type(filename)
            # 临时保存文件到本地
            with tempfile.NamedTemporaryFile(delete=False) as temp_file:
                file.save(temp_file.name)
            # 调用upload_file上传
            minio_client.upload_file(temp_file.name, bucket_name, filename, content_type=content_type)
            # 删除临时文件
            os.unlink(temp_file.name)
            return "File has been uploaded to MinIO."
        except S3Error as e:
            return f"Error uploading file to MinIO: {e}"

    return render_template('index.html', form=form)

验证方式

修改代码后重新上传文件,检查MinIO Bucket中文件的大小是否与原文件一致,下载打开确认内容完整即可。

内容的提问来源于stack exchange,提问作者user23933968

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:20:12