【发布时间】:2019-02-06 14:05:03
【问题描述】:
我想将文件作为 JSON 从客户端上传到 Python 网络服务器 (Tornado) 并将其保存在服务器上。这是我的简化设置:
客户端 HTML:
<input type="file" id="myFile" onchange="fileChange" />
客户端JS:
function fileChange(event) {
const file = event.target.files[0];
const fileReader = new FileReader();
fileReader.onload = (e) => uploadFile(e.target.result, file.name);
fileReader.readAsText(file);
}
function uploadFile(fileContent, fileName) {
const data = {fileContent, fileName};
axios.post('http://localhost:8080/api/uploadFile', JSON.srtingify(data));
}
Python 网络服务器:
class UploadFileHandler(tornado.web.RequestHandler):
def post(self):
requestBody = tornado.escape.json_decode(self.request.body)
file = open(requestBody["fileName"], "w+")
file.write(requestBody["fileContent"].encode("UTF-8"))
file.close()
- 所有上传的文件都是空的(PDF 中的空白页,JPG 文件类型“不支持”,Word 文件无法打开),并且几乎是原始文件的两倍。我该如何解决这个问题?
- 有没有办法改进这个设置?
【问题讨论】:
-
显然你不应该重新编码你在 utf-8 中上传的任何内容,特别是如果文件是二进制文件。这没有任何意义。
-
这听起来很合理,但没有编码我得到这个错误
UnicodeEncodeError('ascii', u'%PDF-1.5\r\n%\ufffd\...\n318578\r\n%%EOF', 11, 15, 'ordinal not in range(128)')"
标签: javascript python html file upload