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
相关产品推荐
相关产品推荐

