Django前端上传图片无法存入media文件夹问题求助
Django自定义页面图片上传失败问题解决
问题现象
通过Django Admin上传图片一切正常(图片存入media文件夹,前端可正常展示),但使用自定义HTML页面上传时,图片无法存入media文件夹,也无法正常展示。
问题根源分析
核心错误:文件获取方式错误
处理文件上传时,文件对象存储在request.FILES中,而非request.POST。原代码直接从request.POST获取imgpreview,得到的只是文件名文本,并非实际的文件对象,导致无法将文件保存到media目录。
前端遗漏配置(常见隐性问题)
上传文件的表单必须设置enctype="multipart/form-data"属性,否则浏览器无法正确发送文件数据,原create.html的表单未包含该属性。
正确实现方案
1. 修正前端表单(添加必要属性)
确保表单包含enctype="multipart/form-data"和CSRF令牌:
<form method="POST" enctype="multipart/form-data"> {% csrf_token %} <label for="imgpreview" class="imglabel">Choose Image</label> <input accept="image/*" type='file' id="imgpreview" name="imgpreview" class="image-form" onchange="previewImage(event);"/> <!-- 其他表单字段:title、category、brand、color等 --> <button type="submit">提交</button> </form>
2. 修正views.py代码(正确获取文件对象)
从request.FILES中获取上传的文件并保存:
def create(request): if request.method == 'POST': title = request.POST['title'] # 从request.FILES获取实际文件对象 image = request.FILES.get('imgpreview') category = request.POST['category'] brand = request.POST['brand'] color = request.POST['color'] clothes = Clothes(title=title, image=image, category=category, brand=brand, color=color) clothes.save() return render(request, "wardrobe/create.html")
原有正确配置确认
settings.py和urls.py的配置无需修改,本身是正确的:
- settings.py:
MEDIA_URL='/media/' MEDIA_ROOT= BASE_DIR/'project5'/'wardrobe'/'media'
- urls.py:
urlpatterns = [ path('admin/', admin.site.urls), path('', include('wardrobe.urls')), ] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
内容的提问来源于stack exchange,提问作者maria
相关产品推荐
相关产品推荐

