Django图片无法上传至Media目录,数据库存URL无实际文件如何解决?
问题原因及修复方案
1. 前端表单缺失文件上传属性
上传文件的表单必须添加enctype="multipart/form-data"属性,否则浏览器不会传输文件二进制内容,后端只能拿到文件名字符串,无法生成实际文件。
修复后的表单代码:
<form action="" method="post" enctype="multipart/form-data"> {% csrf_token %} <input type="file" name="imgTest" id="imgTest"> <input type="submit" value="submit"> </form>
2. 视图中获取上传文件的方式错误
Django中上传的文件不会存放在request.POST中,而是存放在request.FILES对象里,你之前从request.POST取到的只有文件名,没有实际文件内容,因此无法写入本地目录。
修复后的视图代码:
def goProfile(request): if request.method == "POST": image = Image( img = request.FILES.get('imgTest') ) image.save() return render(request,'profile.html')
可选补充:开发环境访问媒体文件配置
如果后续需要在Django自带的开发服务器中直接访问上传的图片,需要在项目根urls.py中添加媒体资源路由:
from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # 原有其他路由规则 ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
内容的提问来源于stack exchange,提问作者HSan
相关产品推荐
相关产品推荐

