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

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模式已开启以提供媒体文件服务

排查与修复步骤

  1. 检查表单提交逻辑

    • 表单必须添加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})
      
  2. 验证文件保存路径权限

    • 运行项目的用户需拥有MEDIA_ROOT目录的读写权限,可通过命令修改:
      chmod -R 755 media/
      chown -R www-data:www-data media/  # 若使用Nginx/Apache,替换为对应服务用户
      
  3. 检查模型保存逻辑

    • 确认未在模型或表单中对content字段做错误自定义处理,比如覆盖save方法时忽略文件保存
    • 若使用自定义表单,确保content字段未被禁用或设为只读
  4. 日志排查

    • 查看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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:05:07