我正在尝试使用javascript上传文件,并通过websockets将数据发送到python tornado服务器。我认为这是在文件创建并存储在我的服务器机器上时工作但是当我尝试打开新创建的文件时,它已损坏。 任何人都可以解释在javascript中读取文件的最佳方法,然后在收到服务器端后如何保存该数据?
这是我用来加载文件的函数:
HomeView.prototype.loadFile = function(dataTransfer)
{
var that = this;
var filereader = new FileReader();
filereader.file = dataTransfer.files[0];
that.fileName = dataTransfer.files[0].name;
filereader.onload = function(e) {
// file is loaded now add it to the zip file
that.fileData = e.target.result;
}
// load the file
filereader.readAsBinaryString(dataTransfer.files[0]);
}
使用ws.send发送(JSON.stringify(msg));其中msg是包含我的文件和消息类型的json对象。 EG {data:filedata,type:fileupload} 然后我的python服务器接收文件(data_str)并将其传递给以下函数以保存它。我在这里使用xlsx文件类型作为示例。通常我会解析文件名并存储上传时的确切文件。
def save_file_from_data(self, data_str):
"""save the rubric file for a byte string"""
try:
# name the zip, open in binary mode
fh = open("newfile.xlsx", 'wb')
# save file data after encoding in UTF-8 first
fh.write(data_str.encode('utf-8'))
fh.close()
except:
print("error")
在写入文件时,我也尝试了fh.write(bytes(data_str,' UTF-8'))。
非常感谢任何建议或提示,
KB