Q&A
お世話になっております。
今、Monacaアプリをクライアントとして、Python Djangoで実装したサーバーサイドに画像ファイルをアップロードする処理を作成しています。しかし、うまくアップロードできず、サーバー上のログファイルにエラーが返ってきてしまいます。おそらくformdataの使い方が悪いのではないかと思うのですが、どう実装したら良いのかわからず悩んでいます。
django.utils.datastructures.MultiValueDictKeyError: "'image'"
画像ファイルは、スマホのカメラまたはアルバムから選択して取得しています。
クライアント側のJavascriptのコードは以下のようになっています。
Javascript
1function imageFileUploader(imageType, image) { 2 3 var credentials = { 4 filetype: imageType, 5 }; 6 var image_file = image; 7 8 $.ajax({ 9 url: HOST_NAME + "user/api/get_filename/", 10 type: 'GET', 11 dataType: 'json', 12 data: credentials, 13 timeout: 10000, 14 }) 15 16 .done(function (data) { 17 18 jsondata = JSON.parse(data); 19 image_file_name = jsondata.fileurl; 20 21 // Test if the image is shown -> success 22 document.getElementById("previewimage").src = image 23 24 var formData = new FormData(); 25 formData.append('filename', image_file_name); 26 formData.append('image', image); 27 28 $.ajax({ 29 url: HOST_NAME + "user/api/file_uploader/", 30 type: 'POST', 31 timeout: 10000, 32 data: formData, 33 processData: false, 34 contentType: false, 35 }) 36 .done(function (data) { 37 jsondata = JSON.parse(data); 38 alert("File upload completed..."); 39 }) 40 .fail(function (XMLHttpRequest, textStatus, errorThrown) { 41 alert(textStatus); 42 }) 43 .fail(function (XMLHttpRequest, textStatus, errorThrown) { 44 alert(textStatus); 45 }) 46 47} 48 49function snapPicture () { 50 51 navigator.camera.getPicture (onSuccess, onFail, 52 {quality: 50, destinationType: Camera.DestinationType.FILE_URI, 53 saveToPhotoAlbum: true}); 54 55 function onSuccess (imageURI) { 56 57 var file_name = imageFileUploader("T", imageURI); 58 if (file_name == "") { 59 console.log("False"); 60 } 61 else { 62 image_send(file_name); 63 } 64 } 65 66 function onFail (message) { 67 console.log("False"); 68 } 69}
一方、Python側のコードは以下の通りです。
Python
1def post(self, request, format=None): 2 outputLogFile("Upload Function is called...") 3 req_file_name = request.data['filename'] 4 req_image = request.FILES['image']
req_file_nameは問題なく取得することができています。
アドバイスをいただければ幸いです。
よろしくお願いいたします。
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。