Django: 从表单保存图像文件

4 投票
3 回答
4275 浏览
提问于 2025-04-16 00:59

我想把通过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,})

但是在调用这个网址的时候,我遇到了这个错误:

'InMemoryUploadedFile' object is unsubscriptable

3 个回答

0

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

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

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

1

不太确定你是否需要把它放在一个StringIO里面。试试这个:

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

试试这个:

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

撰写回答