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

Vercel免费部署Django站点:上传文件/图片遇只读文件系统错误

解决Vercel部署Django后媒体文件上传只读文件系统错误

Vercel的服务器文件系统是只读的,无法直接写入/var/task/media这类本地目录,必须使用外部云存储服务来托管媒体文件。以下是具体解决步骤:

1. 安装必要依赖

安装Django存储后端工具和云存储SDK(以AWS S3为例,Cloudflare R2、DigitalOcean Spaces等S3兼容存储服务也适用):

pip install django-storages boto3 pillow
  • django-storages:提供第三方存储后端的集成能力
  • boto3:对接S3兼容存储服务的SDK
  • pillow:Django处理ImageField所需的图片处理库

2. 配置Django存储后端

在settings.py中添加以下配置:

# 将storages加入已安装应用列表
INSTALLED_APPS = [
    # 原有应用...
    'storages',
]

# 存储服务核心配置
import os
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
AWS_S3_REGION_NAME = os.environ.get('AWS_S3_REGION_NAME')  # 示例:'us-east-1'
AWS_S3_CUSTOM_DOMAIN = f"{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com"
MEDIA_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/"

# 可选配置(公开可读存储桶适用)
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = 'public-read'

3. 在Vercel中设置环境变量

避免硬编码敏感信息,进入Vercel项目的Settings > Environment Variables,添加以下变量:

  • AWS_ACCESS_KEY_ID:存储服务的访问密钥ID
  • AWS_SECRET_ACCESS_KEY:存储服务的秘密访问密钥
  • AWS_STORAGE_BUCKET_NAME:存储桶名称
  • AWS_S3_REGION_NAME:存储桶所在区域

4. 配置存储桶权限

确保存储桶的权限支持上传和访问:

  • 设置CORS规则,允许你的Django站点域名发起上传请求
  • 配置存储桶策略,授予文件的读写权限(公开桶可设置public-read权限)

5. 验证配置

重新部署Django项目到Vercel,尝试从管理面板上传图片/文件,此时文件会直接存储到云存储服务,绕过Vercel的只读文件系统限制,即可解决权限错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:12:03