2017-09-18 6 views
0

Je suis nouveau sur le développement de site Web. J'utilise React-Redux et Python comme mon back-end (cadre Falcon) et ce que je l'ai été:Python recevoir formData à partir de la requête POST, obtenir le flux, fichier corrompu

1) Recevoir une formData() de frontend, dispatch à POST:

mon code d'expédition:

this.props.dispatch({type: ActionTypes.FILE_UPLOAD_REQUEST, email: this.state.email, file: this.state.policyFile}); 

et en utilisant le middleware, pour appeler la fonction POST:

var result = yield call(Atlas.uploadFile, action.email, action.file); 

et ma fonction de récupération:

export const uploadFile = (email, file) => { 
    console.log(file); 
    return fetch(`${BASE_URL}/v1/files/${email}/policies`, { 
     method: 'POST', 
     body: file, 
     headers:{} 
    }) 
    .then(response => response.json()) 
} 

et mon côté arrière-plan, en utilisant l'API de faucon:

def on_post(self, req, resp, email): 
    local_path = create_local_path(req.url, req.content_type) 
    with open(local_path, 'wb') as temp_file: 
     body = req.stream.read() 
     temp_file.write(body) 

Le problème est le TEMP_FILE est créé, mais il est corrompu et après que je change l'extension de fichier txt. Il devrait être écrit dans un code étrange que seul l'ordinateur comprend. MAIS le sont certaines lignes qui rendent le fichier entier corrompu. aidez s'il vous plaît. c'est le fichier txt ressemble:

------WebKitFormBoundaryQXmL1AgwA112xzkA 
Content-Disposition: form-data; name="file"; filename="baboon.jpg" 
Content-Type: image/jpeg 

ˇÿˇ‡JFIFˇ€Ñ (%!1"%)+...383-7(-.+ 

-% ---------------.---------------- ------------ 7 ----- ¿"fi" ƒƒ>! 1AQ "aqÅë ° 2B ± ¡R- · # brÒÇí ¢ $ 3Scƒƒ! 1QAa" # 2BqÅ /? "G ÷ = '^ - » ÷ x x x x x x x x x x x x x,,,,,,,,,,,,,,,,,,,,- • 1BR ¢ ÃÖ 'Ô¨C/ƒXΩ¡ eb & et continuer

Regardez la première ligne 3, il fait le fichier corrompu.

Toute idée

Répondre

0

Falcon ne gère pas le téléchargement de fichiers que vous essayez de faire de la boîte - vous devez utiliser quelque chose comme https://github.com/yohanboniface/falcon-multipart, qui fournit le middleware pour gérer multipart/form-data upload.

Vous allez ajouter le middleware faire quelque chose comme:

from falcon_multipart.middleware import MultipartMiddleware 

api = falcon.API(middleware=[MultipartMiddleware()]) 

Vous aurez probablement envie de modifier votre code frontend (voir fetch post with multipart form data), bien que je ne sais pas exactement ce cadre que vous utilisez.

Une fois que vous avez fait, vous pourriez finir avec le code de gestionnaire qui ressemble plus (en supposant que vous passer le fichier dans un champ de formulaire appelé « image »):

def on_post(self, req, resp, email): 
    local_path = create_local_path(req.url, req.content_type) 
    with open(local_path, 'wb') as temp_file: 
     body = req.get_param('image') 
     temp_file.write(body)