2016-05-03 17 views
2

サーバにファイルをアップロードしようとしましたが、ImmutableMultiDictオブジェクトが空に戻ります。jQueryの要求データから空のImmutableMultiDictオブジェクトを取得する

app = Flask(__name__) 

@app.route('/') 
def index(): 
    return render_template("upload.html") 


@app.route('/uploadajax', methods = ['POST']) 
def upldfile(): 
    logging.debug('request.method : %s', request.method) 
    logging.debug('request.files : %s', request.files) 
    logging.debug('request.args : %s', request.args) 
    logging.debug('request.form : %s', request.form) 
    logging.debug('request.values : %s', request.values) 
    logging.debug('request.headers : %s', request.headers 
    logging.debug('request.data : %s', request.data) 

    upload_files = request.files.getlist("file") 

    logging.debug('upload_files : %s', upload_files) 

    file_val = request.files 

    for k, v in file_val.items() :logging.debug('key : %s -- value : %s ', k, v) 


    # if request.method == 'POST':file_val = request.files['file'] 
    return render_template('upload.html') 


if __name__ == '__main__': 
    app.run(host='127.0.0.1', debug=True, port=2345, use_reloader=True) 

upload.html

<html> 
<head> 
    <title>Upload File Ajax</title> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<script type="text/javascript"> 
$(function() { 
    $('#upload-file-btn').click(function() { 
     var form_data = new FormData($('#upload-file')[0]); 
     form_data.append('file', $('input[type=file]')[0].files[0]); 
     console.log(form_data) 
     $.ajax({ 
      url: '/uploadajax', 
      data: form_data, 
      type: 'POST', 
      contentType: false, 
      cache: false, 
      processData: false, 
      async: false, 
      success: function(data) { 
       console.log('Success!'); 
       // console.log(data); 
      }, 
     }); 
    }); 
}); 

</script> 

</head> 
<body> 
<form action="" name="upload-file" id="upload-file" method="post" enctype="multipart/form-data"> 
    <fieldset> 
     <label for="file">Select a file</label> 
     <input name="file" id="file" type="file"> 
    </fieldset> 
    <fieldset> 
     <button id="upload-file-btn" type="button">Upload</button> 
    </fieldset> 
</form> 

</body> 
</html> 

フラスコこれは、ログデータ

016-05-03 00:05:30,500 - root - DEBUG - request.method : POST 
    2016-05-03 00:05:30,500 - root - DEBUG - request.files : ImmutableMultiDict([]) 
    2016-05-03 00:05:30,500 - root - DEBUG - request.args : ImmutableMultiDict([]) 
    2016-05-03 00:05:30,501 - root - DEBUG - request.form : ImmutableMultiDict([]) 
    2016-05-03 00:05:30,501 - root - DEBUG - request.values : CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([])]) 
    2016-05-03 00:05:30,501 - root - DEBUG - request.headers : Referer: http://127.0.0.1:2345/ 
    Origin: http://127.0.0.1:2345 
    Content-Length: 368 
    User-Agent: Mozilla/5.0.... 
    Connection: keep-alive 
    X-Requested-With: XMLHttpRequest 
    Host: 127.0.0.1:2345 
    Accept: */* 
    Accept-Language: en-US,en;q=0.8 
    Content-Type: false 
    Accept-Encoding: gzip, deflate2016-05-03 03:13:58,236 - root - DEBUG - request.data : ------WebKitFormBoundaryA8jmfBTRKGJFtMS 
Content-Disposition: form-data; name="file"; filename="test_upload.txt" 
Content-Type: text/plain 

qbcdefgh 
abcdefgh 
------WebKitFormBoundaryA8jmfBTRKGJFtMS 
Content-Disposition: form-data; name="file"; filename="test_upload.txt" 
Content-Type: text/plain 

qbcdefgh 
abcdefgh 
------WebKitFormBoundaryA8jmfBTRKGJFtMS-- 


2016-05-03 00:05:30,501 - root - DEBUG - upload_files : [] 
+1

'$( '#upload-file')[0]'と '$( 'input [type = file]')[0]'はあなたがそう思っていますか? – dirn

+0

私は 'console.log()'を使ってそれらを表示しましたが、 '$( '#upload-file')[0]'からフォーム情報を得て$( 'input [type = file]') [0]。それは正しい方法ではありませんか? – mongotop

+0

@dirn - 私は別のquestioinからこの例を使ってみました。 '$( '#upload-file')[0]'と '$( 'input [type = file]')'はデータを引き出す正しい方法ですか? [0] thohttp://stackoverflow.com/questions/23980733/jquery-ajax-file-upload-php – mongotop

答えて

1

あり、これを原因とするそれはあなたのjQueryバージョンが古すぎます。

2.1.1を使用すると、コードは正常に実行されます。

ご参考までに、form_data.appendは必要ありません。

+0

あなたはそうです!ありがとう、@trdcaz! :) – mongotop

関連する問題