Django文件上传异常:媒体文件缺失及路径问题求助
Django文件上传异常:文件缺失且无法获取完整媒体路径
模型代码
class Article(TrackingModel): titleArt = models.CharField(max_length=200) descriptionArt = models.TextField() content = models.FileField(upload_to='articles/%Y/%m/%d') section = models.ForeignKey(Section, on_delete=models.CASCADE) is_accepted = models.BooleanField(default=False) created_by = models.ForeignKey(User, on_delete=models.CASCADE) def __str__(self): return self.titleArt
媒体配置
MEDIA_ROOT = BASE_DIR / 'media' MEDIA_URL = 'media/'
URL配置
from django.conf import settings from django.conf.urls.static import static urlpatterns = [ path('admin/', admin.site.urls), path('ciems_administration/', include('administration.urls')), path('auth/', include('accounts.urls')), path('', include('intelsight.urls')), ] if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
模板片段
<div class="container"> <h1>Report Details</h1> {{ article.titleArt }}<br> {{ article.descriptionArt }}<br> {{ article.content.url }}<br> {{ article.section }}<br> {{ article.created_at }}<br> {{ article.updated_at }}<br> <a href="{% url 'articleList' %}" class="btn btn-primary">Back</a> </div>
问题现象
- 页面显示文件路径为
/media/...,但本地media目录中无实际文件 - 文件上传流程未正常完成,无法确认文件是否被正确保存
已尝试操作
- 验证
MEDIA_ROOT和MEDIA_URL配置正确性 - 确保
media目录存在且权限设置正确 - 确认DEBUG模式已开启以提供媒体文件服务
排查与修复步骤
检查表单提交逻辑
- 表单必须添加
enctype="multipart/form-data"属性,这是文件上传的必要条件:<form method="post" enctype="multipart/form-data"> {% csrf_token %} {{ form.as_p }} <button type="submit">提交</button> </form> - 视图函数需通过
request.FILES获取上传文件,保存模型时要传入文件数据:def article_create(request): if request.method == 'POST': form = ArticleForm(request.POST, request.FILES) if form.is_valid(): article = form.save(commit=False) article.created_by = request.user article.save() return redirect('article_detail', pk=article.pk) else: form = ArticleForm() return render(request, 'article_create.html', {'form': form})
- 表单必须添加
验证文件保存路径权限
- 运行项目的用户需拥有
MEDIA_ROOT目录的读写权限,可通过命令修改:chmod -R 755 media/ chown -R www-data:www-data media/ # 若使用Nginx/Apache,替换为对应服务用户
- 运行项目的用户需拥有
检查模型保存逻辑
- 确认未在模型或表单中对
content字段做错误自定义处理,比如覆盖save方法时忽略文件保存 - 若使用自定义表单,确保
content字段未被禁用或设为只读
- 确认未在模型或表单中对
日志排查
- 查看Django运行日志,查找文件上传相关错误信息,比如权限不足、路径不存在等异常
- 可在
settings.py中开启DEBUG日志:LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'class': 'logging.StreamHandler', }, }, 'root': { 'handlers': ['console'], 'level': 'DEBUG', }, }
内容的提问来源于stack exchange,提问作者Youssef Elhormi
相关产品推荐
相关产品推荐

