我想将输入HTML文件的任何文件(Word,PDF,图像...)上传到python服务器。
借助于snakecharmerb(Upload file as JSON to Python webserver),我可以通过以下方式在JavaScript中对文件进行编码来发送文件:
function fileChange(event) {
const file = event.target.files[0];
const fileReader = new FileReader();
fileReader.onload = function(e) {
const encodedFile = btoa(unescape(encodeURIComponent(e.target.result)));
uploadFile(JSON.stringify(encodedFile), file.name);
}
fileReader.readAsText(file);
}
在Python中,我可以通过以下方式读取和保存文件:
import json
from base64 import b64decode
binary_data = b64decode(json.loads(file));
with open(file_name, "wb") as f:
f.write(binary_data)
但是生成的文件不可读或内容编码不正确。我想我需要在utf-8中编码binary_data。但是binary_data.encode("utf-8")
会导致错误。
test_file.txt
Hello World!
Special chars: äöüß
Python错误
UnicodeDecodeError('ascii', 'Hello World!\r\nSpecial chars: \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd', 29, 30, 'ordinal not in range(128)')
我还尝试将其与.decode('string_escape')