django圖像的MultiValueDictKeyError文件上傳

[英]MultiValueDictKeyError for django image File upload


I have spent a LOT of time trying to resolve this- Read Django docs, consulted forms but not got anything satisfactory. So please be patient here with me. I am trying to do an upload of an Image file here from my html template. This is my html form

我花了很多時間試圖解決這個問題 - 閱讀Django文檔,咨詢表格但沒有得到任何滿意的結果。所以請耐心等待我。我試圖從我的html模板上傳一個圖像文件。這是我的html表單

<form id="tryOnPageForm" method="POST" enctype="multipart/form-data" action="/dummy/{{frame.slug}}/">
{% csrf_token %}
  <input type="file" name="uploadFromPC" id="uploadFromPC" class="myButton" title="Upload From PC" value= "Upload from PC" onchange="uploadPC()" style="float:left;">
 <input type="submit" id="Submit" class="myButton" value= "Done" style="display:none"><br><br>

 </form>

The file upload happens properly an d I am able to see the uploaded image file in the HTML.

文件上傳正確,我可以在HTML中看到上傳的圖像文件。

In my views.py,

在我的views.py中,

def upload_image(request, frameslug):

frame= VTryON.objects.get(slug=frameslug)
if request.method == 'POST':
    form = ImageUploadForm(request.POST, request.FILES)
    print "FILES", request.FILES
    if form.is_multipart():
        save_file(request.FILES['image'])
        return HttpResponseRedirect('Successful')
    else:
        return HttpResponse('Invalid image')
else:
    form = ImageUploadForm()
return render_to_response('dummy.html', {'form': form})


def save_file(file, path=''):
    ''' Little helper to save a file
    '''
    filename = file._get_name()
    fd = open('%s/%s' % (MEDIA_ROOT, str(path) + str(filename)), 'wb')
    for chunk in file.chunks():
        fd.write(chunk)
    fd.close()

and in my forms.py,

在我的forms.py中,

from django import forms
class ImageUploadForm(forms.Form):   
image = forms.ImageField(label='Select a file', help_text='max. 20 megabytes')

When I run my code I get this error

當我運行我的代碼時,我收到此錯誤

MultiValueDictKeyError at /dummy/fr1234/

The print statement in my from my view.py shows this

我的view.py中的print語句顯示了這一點

FILES <MultiValueDict: {u'uploadFromPC': [<InMemoryUploadedFile: model4.jpg (image/jpeg)>]}>

and this is the traceback

這是追溯

Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  112.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\Work-Backup\LiClipse Workspace\vTryON_DJango_Integration\vTryON\views.py" in upload_image
  189.             save_file(request.FILES['image'])
File "C:\Python27\lib\site-packages\django\utils\datastructures.py" in __getitem__
  301.             raise MultiValueDictKeyError(repr(key))

Exception Type: MultiValueDictKeyError at /dummy/fr1234/
Exception Value: "'image'"

I am aware that the enctype should be multipart/form-data since I have read it in tutorials. ALso, i have not used any field in my models.py to store the uploaded image.Instead I want to directly save it to thr MEDIA_URL location.Might that be an issue? Please help. This has held me up for a long time. Thanks in advance.

我知道enctype應該是multipart / form-data,因為我已經在教程中閱讀了它。另外,我沒有在models.py中使用任何字段來存儲上傳的圖像。相反,我想直接將它保存到thrIA MEDIA_URL location.Might那是一個問題嗎?請幫忙。這讓我很長時間了。提前致謝。

2 个解决方案

#1


6  

I was able to solve this(after spending a lot of time and with some help from my friends...)

我能夠解決這個問題(花了很多時間並在朋友的幫助下......)

I think the error

我認為錯誤

Exception Type: MultiValueDictKeyError at /dummy/fr1234/ Exception Value: "'image'"

異常類型:/ dummy / fr1234處的MultiValueDictKeyError /異常值:“'image'”

was coming because request.FILES was unable to get the uploaded image from the user input, the reason being that the name of the user input file that I provided was wrong!!

是因為request.FILES無法從用戶輸入獲取上傳的圖像,原因是我提供的用戶輸入文件的名稱是錯誤的!!

It should have been request.FILES['uploadFromPC'] instead of request.FILES['image'] because that is the name that I had kept in my HTML.

應該是request.FILES ['uploadFromPC']而不是request.FILES ['image'],因為這是我在HTML中保留的名稱。

<input type="file" name="uploadFromPC" id="uploadFromPC" class="myButton" title="Upload From PC" value= "Upload from PC" onchange="uploadPC()" style="float:left;">

That was a stupid error and a lot of time wasted to fix it.. :(

這是一個愚蠢的錯誤,浪費了很多時間來修復它.. :(

.. but ya, good learning.

..但是,好的學習。

I hope this helps somebody else who is trying to do something similar. Although, I would like it if somebody can explain to me the use of forms.py here. Is it possible to do an user upload without forms.py?

我希望這有助於其他人嘗試做類似的事情。雖然,如果有人可以向我解釋在這里使用forms.py,我希望如此。是否可以在沒有forms.py的情況下進行用戶上傳?

#2


1  

I found that the error occurs when you submit the form without selecting the file. when a file is not selected then the input_name in your case image is u''. this gives the error as the dictionary has no such key.
i tried to find a way to try and except error but there is no such exception in python MultiValueDictKeyError

我發現在沒有選擇文件的情況下提交表單時會發生錯誤。如果未選擇文件,則案例圖像中的input_name為u''。這給出了錯誤,因為字典沒有這樣的鍵。我試圖找到一種方法來嘗試除了錯誤,但在python MultiValueDictKeyError中沒有這樣的異常


注意!

本站翻译的文章,版权归属于本站,未经许可禁止转摘,转摘请注明本文地址:https://www.itdaan.com/blog/2014/07/30/720bbfb2658683de150f7ec5543c8b66.html



 
粤ICP备14056181号  © 2014-2020 ITdaan.com