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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:52:26