我是网站开发的新手。我使用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行,它会使文件损坏。
有什么想法吗?
答案 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)