Вы пытаетесь загрузить двоичные файлы (word, jpg), сериализованные как JSON, и сохранить их на сервере.
Чтобы обработать двоичные данные в JSON, сначала кодируют двоичные данные как base64 , а затем вызывают JSON.stringify
.
Как это (не проверено):
function uploadFile(fileContent, fileName) {
// Encode the binary data to as base64.
const data = {
fileContent: btoa(fileContent),
fileName: fileName
};
axios.post('http://localhost:8080/api/uploadFile', JSON.stringify(data));
}
На стороне сервера вам необходимо десериализовать из JSON, декодировать base64 и открыть файл в двоичном режиме , чтобы убедиться, что вы записываете на диск загруженные двоичные данные. Открытие файла в текстовом режиме требует, чтобы данные были зашифрованы перед записью на диск, и этот шаг кодирования повредит двоичные данные.
Как-то так должно работать:
class UploadFileHandler(tornado.web.RequestHandler):
def post(self):
requestBody = tornado.escape.json_decode(self.request.body)
# Decode binary content from base64
binary_data = base64.b64decode(requestBody[fileContent])
# Open file in binary mode
with open(requestBody["fileName"], "wb") as f:
f.write(binary_data)