在Vercel部署的Flask项目中如何实现文件写入?
Flask + Vercel 实现文件写入的解决方案
问题原因
Vercel的无服务器运行环境是只读文件系统,你尝试在/var/task/api/uploads创建目录和写入文件的操作不被允许,这就是报错Errno 30 Read-only file system的核心原因。本地环境是你自己的机器,文件系统有完整读写权限,因此能正常运行。
以下是两种适配Vercel环境的解决方案:
方案一:使用Edge Config存储文本内容
Edge Config是Vercel提供的轻量级配置存储服务,适合存储小体积的文本内容(如单条字符串、JSON对象)。
在Vercel控制台创建Edge Config实例
- 进入你的Vercel项目,切换到「Edge Config」选项卡
- 创建新实例(例如命名为
file-storage),并添加一个键值对(比如键设为1.txt,初始值可留空)
安装Edge Config Python SDK
pip install vercel-edge-config修改Flask路由代码
from vercel_edge_config import EdgeConfig import os from flask import Flask app = Flask(__name__) # 从Vercel环境变量读取Edge Config连接字符串 edge_config = EdgeConfig(os.environ.get('EDGE_CONFIG')) @app.route('/write', methods=['GET']) def write_to_edge_config(): text = "hello world" # 将文本写入Edge Config的指定键 edge_config.set('1.txt', text) # 可选:读取验证内容 content = edge_config.get('1.txt') return "ok"配置Vercel环境变量
- 进入项目「Settings」→「Environment Variables」
- 添加变量
EDGE_CONFIG,值为你的Edge Config实例的连接字符串(可在Edge Config控制台复制)
方案二:使用Vercel Blob存储文件
如果需要真正的文件存储(支持更大体积、多种文件格式),Vercel Blob是更合适的选择。
安装Vercel Blob Python SDK
pip install vercel-blob修改Flask路由代码
from vercel_blob import put import os from flask import Flask app = Flask(__name__) @app.route('/write', methods=['GET']) def write_to_blob(): text = "hello world" # 上传文本到Blob存储,指定文件名 result = put( "1.txt", text.encode('utf-8'), access="public", # 可选设置为private控制访问权限 token=os.environ.get('BLOB_READ_WRITE_TOKEN') ) # result会返回文件的访问URL、大小等信息 return "ok"配置Blob访问令牌
- 进入Vercel控制台「Storage」→「Blob」,创建Blob存储实例
- 生成「Read Write Token」,复制后添加到项目环境变量
BLOB_READ_WRITE_TOKEN
注意事项
- Edge Config适合存储小体积配置类文本,免费版有配额限制
- Vercel Blob更适配传统文件存储场景,支持更大文件和多类型
- 两种方案均无需操作本地文件系统,完全兼容Vercel无服务器环境
内容的提问来源于stack exchange,提问作者Adrian Botteon
相关产品推荐
相关产品推荐

