Flask网站上传文件至Firebase报错:找不到文件或目录,求解决
问题:Flask文件上传至Firebase报错"No such file or directory"
背景
现有Flask应用,原本将用户上传的PDF文件保存到本地UPLOAD_FOLDER目录,目标改为直接上传至Firebase Storage的pos文件夹,无需本地存储。修改代码后出现文件找不到的错误。
错误原因
- 调用
storage.child(path_on_cloud).put(path_local)时,path_local仅传入文件名,但文件实际保存在UPLOAD_FOLDER目录下,当前工作目录无法找到该文件,导致路径错误。 - 原有代码仍执行本地保存操作,不符合「不存本地」的需求。
解决方法
方法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
相关产品推荐
相关产品推荐

