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

Flask网站上传文件至Firebase报错:找不到文件或目录,求解决

问题:Flask文件上传至Firebase报错"No such file or directory"

背景

现有Flask应用,原本将用户上传的PDF文件保存到本地UPLOAD_FOLDER目录,目标改为直接上传至Firebase Storage的pos文件夹,无需本地存储。修改代码后出现文件找不到的错误。

错误原因

  1. 调用storage.child(path_on_cloud).put(path_local)时,path_local仅传入文件名,但文件实际保存在UPLOAD_FOLDER目录下,当前工作目录无法找到该文件,导致路径错误。
  2. 原有代码仍执行本地保存操作,不符合「不存本地」的需求。

解决方法

方法1:修正本地文件路径(保留本地存储)

若需保留本地备份,只需将put的参数改为文件的完整本地路径:

@app.route('/', methods=['POST'])
def upload_file():
    if request.method == 'POST':
        if 'files[]' not in request.files:
            flash('No file part')
            return redirect(request.url)
        files = request.files.getlist('files[]')
        for file in files:
            if file and allowed_file(file.filename):
                filename = secure_filename(file.filename)
                local_file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
                file.save(local_file_path)
                
                path_on_cloud = f"pos/{filename}"
                storage.child(path_on_cloud).put(local_file_path)
        flash('File(s) successfully uploaded')
        return redirect('/')

方法2:直接上传文件对象(无需本地存储,符合需求)

跳过本地保存步骤,直接将Flask接收的文件对象上传至Firebase,需将文件指针重置到文件开头:

@app.route('/', methods=['POST'])
def upload_file():
    if request.method == 'POST':
        if 'files[]' not in request.files:
            flash('No file part')
            return redirect(request.url)
        files = request.files.getlist('files[]')
        for file in files:
            if file and allowed_file(file.filename):
                filename = secure_filename(file.filename)
                # 将文件指针移至开头,确保Firebase读取完整内容
                file.seek(0)
                path_on_cloud = f"pos/{filename}"
                # 直接传入文件对象,无需本地保存
                storage.child(path_on_cloud).put(file, filename=filename)
        flash('File(s) successfully uploaded')
        return redirect('/')

额外说明

  • 确保Firebase配置config中的存储权限设置正确,允许上传操作。
  • 若使用方法2,可删除代码中与UPLOAD_FOLDER相关的配置,进一步精简代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:18:16