Django中图片上传不保存文件

0 投票
3 回答
2650 浏览
提问于 2025-04-18 11:14

上传的时候没有报错。但是,图片并没有出现在我指定的位置。我在MEDIA_ROOT里放了一个绝对路径,并在ImageField的(upload_to)参数中引用了这个路径。不太确定我漏掉了什么。

模型:

class FileUploadHandler(models.Model):
    title = models.CharField(max_length=100)
    file = models.ImageField(upload_to='/Python27/Lib/site-packages/django/bin/mideastinfo/wiki/static/')

视图:

from models import Article, Edit
from forms import ArticleForm, EditForm
from forms import *
from PIL import Image
from models import FileUploadHandler

def image_upload(request):
    if request.method == 'POST':
        form = UploadImageForm(request.POST, request.FILES)
        if form.is_valid():
            FileUploadHandler(request.FILES['image'])
            return render_to_response('wiki/gallery.html')
    else:
        form = UploadImageForm()
    return render_to_response('wiki/gallery.html', RequestContext(request, {'form': form}))

表单.py:

class UploadImageForm(forms.ModelForm):
    class Meta:
    model = FileUploadHandler
    #image = forms.ImageField()\
    fields = ['title']

3 个回答

0

这个解决方案可能是这样的模板:

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form }}
    <input type="submit" name="submit" value="Submit" />
</form>

注意:enctype="multipart/form-data" 这个设置很重要哦。

0

我觉得你可能有点儿用力过猛。其实你不需要直接调用FileUploadHandler模型来保存图片。

首先,你的表单应该是:

class UploadImageForm(forms.ModelForm):
    class Meta:
        model = FileUploadHandler

然后你的视图应该是:

from forms import UploadImageForm

def image_upload(request):
    form = UploadImageForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        form.save()
    return render_to_response('wiki/gallery.html', RequestContext(request, {'form': form}))

因为你在使用ModelForm,所以只需要在表单验证通过后保存它就可以了。确保在你的模板中文件字段是可见的。之前你在表单中排除了'file'字段,所以才没法正常工作。

更新:我把你的视图进一步简化了,仅仅是因为……

0

这里你没有把它保存在视图中。只需使用这个:

 if request.method == 'POST':
    form = UploadImageForm(request.POST, request.FILES)
    if form.is_valid():
        newfile = FileUploadHandler(title='anything', file=request.FILES['image'])
        newfile.save()

撰写回答