Python从POST请求接收formData,获取流,File Corrupt

时间:2017-09-18 05:06:04

标签: python file-upload react-redux form-data falconframework

我是网站开发的新手。我使用React-Redux,Python作为我的后端(Falcon框架),我做的是:

1)从frontEnd接收formData(),使用Dispatch进行POST:

我的调度代码:

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

并使用中间件,只调用函数POST:

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

和我的获取功能:

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())
}

和我的后端,使用falcon API:

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)

问题是temp_file已创建,但是在我将扩展名更改为txt文件后它已损坏。它应该用一些只有计算机才能理解的奇怪代码编写。但是有些行会使整个文件损坏。请帮忙。这是txt文件,如下所示:

------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Ä'Å',5kÔVãW¶±ÈK@¡tq]〜¸¢J ^dö±“≈B-Ba.'QoQΠ0dúC•,nı^ /•1BR¢     'Ô¨C/ƒXΩ¡Eb&     并继续前进

查看前3行,它会使文件损坏。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Falcon并不像您一样处理文件上传,而是尝试开箱即用 - 您需要使用类似https://github.com/yohanboniface/falcon-multipart的内容,它提供中间件来处理多部分/表单数据上传

您将添加中间件,例如:

from falcon_multipart.middleware import MultipartMiddleware

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

您可能想要更改您的前端代码(请参阅fetch post with multipart form data),但我不确定您正在使用哪种框架。

一旦你这样做了,你最终可能会得到看起来更像的处理程序代码(假设你在名为" 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)