2016-10-17 5 views
0

Ajax POST 요청을 사용하여 FormData에서 이미지 파일을 보내려고합니다. 나는이 문제에 직면하고있다 : 나는 플라스크 부분에 FormData를 추출하는 방법을 모르는Flask에서 ajax를 통해 전송 된 FormData를 수락하는 방법은 무엇입니까?

  1. 나는이 때문에 1 인 경우 아약스 POST 요청 (확실하지를 만드는 500 내부 서버 오류

    @app.route('/', methods=['GET','POST']) 
    def upload_file(): 
    if request.method == 'POST': 
        file = request.files['file'] 
        if file: # and allowed_file(file.filename): 
         filename = secure_filename(file.filename) 
         file.save(os.path.join(os.getcwd()+"/static", "current_image.jpg")) 
         return jsonify({'tasks': tasks}) 
    
    :)

당신에게

플라스크 파이썬 코드 감사

HTML과 자바 스크립트 코드 :

<input id="pictureInput" type=file name=file> 
<input type=submit value=Upload id="button"> 

<script type="text/javascript"> 
var pictureInput = document.getElementById("pictureInput"); 
var myFormData = new FormData(); 
myFormData.append('pictureFile', pictureInput.files[0]); 

$("#button").click(function(){ 
    console.log(pictureInput); 
    console.log(pictureInput.files[0]); 
    console.log(myFormData); 

    $.ajax({ 
     url: "http://localhost:8000/", 
     type: 'POST', 
     processData: false, // important 
     contentType: false, // important 
     dataType : 'json', 
     data: myFormData, 
     success : function(data){ 
      console.log(data); 
     }, 
    }); 
}); 
</script> 

오류 : enter image description here

+0

그 500 응답의 * content *는 무엇입니까? 실제 오류 란 무엇입니까? –

+0

미안 해요, 다니엘. 네가 무슨 뜻인지 이해 했어. POSTMAN을 사용하여 얻은 오류 응답을 추가했습니다. – matchifang

+0

그게 원래 보여준 것과 다른 코드예요. 'sys.stdout.write'에서 오류가 발생했습니다. –

답변

0

다음 코드는 당신을 위해 작동합니다. 당신은 당신의 app.py 파일과 같은 수준의 static 폴더가 필요

app.py

import os 
from flask import Flask, request, jsonify 
from werkzeug.utils import secure_filename 

app = Flask(__name__) 


@app.route('/', methods=['GET','POST']) 
def upload_file(): 
    if request.method == 'POST': 
     file = request.files['file'] 
     if file: 
      filename = secure_filename(file.filename) 
      file.save(os.path.join(os.getcwd()+"/static", "current_image.jpg")) 
      tasks = [] 
      return jsonify({'tasks': tasks}) 


if __name__ == "__main__": 
    app.run(host='0.0.0.0', debug=True) 

작업은 코드에서 위의 정의, 그래서 난 그냥 빈에 초기화되지 명부. jQuery가 템플릿에로드되었는지 확인해야한다.

관련 문제