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

Django中图片未存入media/pics文件夹但数据库存文件名的问题

Django图片无法存储到media/pics目录的排查方案

问题场景

在Django项目中,数据库已成功保存图片文件名,但图片实际并未存储到media/pics目录下,项目相关代码如下:

views.py 代码片段

employee = Employee.objects.create(
    user=request.user,  # 关联当前用户
    first_name=request.POST.get('employee_firstname'),
    middle_name=request.POST.get('employee_middlename'),
    last_name=request.POST.get('employee_lastname'),
    email=request.POST.get('employee_email'),
    land_phone_number=request.POST.get('employee_landphone'),
    mobile_phone_number=request.POST.get('employee_mobile'),
    gender=request.POST.get('gender'),
    hire_date=request.POST.get('hire_date'),
    position=position,
    address=address,
    date_of_birth=request.POST.get('dob'),
    img=request.FILES.get('imgg'),  # 注意使用request.FILES获取文件
)

models.py 代码片段

class Employee(models.Model):
    img = models.ImageField(upload_to='pics')

settings.py 代码片段

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# 定义媒体文件URL
MEDIA_URL = '/media/'

urls.py 代码片段

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

add_user.html 代码片段

<div class="contact-img">
    <input type="file" id="imgg" name="imgg" class="form-control" accept="image/*">
</div>

list.html 代码片段

<img src="{{ datas.employee.img.url }}" alt="User Avatar" class="user-avatar">

排查方向及解决方法

  • 表单缺少enctype="multipart/form-data"属性
    文件上传的表单必须指定该属性,否则浏览器不会传递文件数据,request.FILES会为空。检查表单标签,修改为:

    <form method="POST" enctype="multipart/form-data">
        <!-- 表单内容 -->
    </form>
    

    这是最常见的问题根源,没有该属性时,request.FILES.get('imgg')返回None,数据库中可能仅留存了测试阶段的空值或旧文件名。

  • 视图未正确处理文件数据
    在视图中添加调试代码,确认request.FILES是否包含上传的文件:

    print(request.FILES)
    

    如果使用ModelForm处理表单,需确保实例化时传入request.FILES:

    form = EmployeeForm(request.POST, request.FILES)
    if form.is_valid():
        form.save()
    
  • MEDIA目录权限不足
    检查media及media/pics目录的读写权限,确保Django进程拥有写入权限。Linux环境下可执行以下命令调整:

    chmod -R 755 media/
    chown -R www-data:www-data media/  # 根据服务器运行用户调整
    
  • 缺少pillow依赖库
    Django的ImageField依赖pillow库,未安装会导致文件保存失败。执行以下命令安装:

    pip install pillow
    
  • 文件名包含特殊字符
    尝试上传文件名简单的图片(如test.jpg),避免中文、空格或特殊符号,部分环境下这类字符会导致文件保存异常。

内容的提问来源于stack exchange,提问作者Julian divagaran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:23:10