Django:通过表单保存图片文件

4

我希望能够保存通过PaletteGenForm上传的图像,方法如下:

#Form 
class PaletteGenForm(forms.Form):
    im = forms.ImageField(required=True)

#View
def palette_gen_view(request):
    PATH_OF_IMAGE_TO_BE_PALETTED= MEDIA_ROOT+ "/tobesaved.png"
    if request.method == 'POST':
        form = PaletteGenForm(request.POST, request.FILES)
        if form.is_valid():
            im = Image.open(StringIO(request.FILES['im']['content']))
            im.save(PATH_OF_IMAGE_TO_BE_PALETTED, "PNG")
            #call some functions to generate pallete
            return #returns the palette of the image.
    else:
        form = PaletteGenForm()
    return render_to_response('palette_generate.html', {'form': form,})

然而,当调用此URL时,我遇到了以下错误:
'InMemoryUploadedFile' object is unsubscriptable
3个回答

4

试试这个:

im = Image.open(StringIO(request.FILES['im'].read()))

感谢您的建议,我按照您的方法更改后得到了以下结果:在/palet/处出现TypeError错误,'module'对象不可调用。 - Hellnar
1
你的代码中似乎有 'import StringIO',应该改为 'from StringIO import StringIO'。 - Ashok

1

不确定您是否需要将其完全包装在StringIO中。试试

im = Image.open(request.FILES['im']['content'])

没有包装,我仍然得到相同的错误:在 /palet/ 处发生 TypeError 错误: 'InMemoryUploadedFile' 对象是不可订阅的。 - Hellnar

0

尝试从表单的cleaned_data中读取数据

im = Image.open(StringIO(form.cleaned_data['im'].read()))

对我来说这个方法可行(没有尝试从请求中读取)


你能提供完整的追踪信息以查看哪一行出错了吗?TypeError at /palat/ 'module' object is not callable。 - Ashok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接