Как я могу получить документ Word из конечной точки Django?
Я заинтересован в создании веб-приложения с Vue frontend и Django backend, которое позволяет пользователю загружать документ word в Django API с объектом конфигурации для форматирования и редактирования документа с помощью python-docx. Сейчас я пытаюсь загрузить файл из конечной точки REST и постоянно сталкиваюсь с этой проблемой.
script.js:32 Error: SyntaxError: Unexpected token P in JSON at position 0
Я использую fetch для выполнения POST-запроса к конечной точке, и я искренне думаю, что ошибка кроется где-то там, если не в моей обработке файловых объектов. В настоящее время в приложении отсутствует обработка исключений, потому что я просто хочу посмотреть, смогу ли я заставить этот основной механизм работать, поэтому прошу прощения за текущее состояние приложения.
script.js api call
methods: {
run(e) {
//test data
const config = {
pageLimit: 9,
marginSize: 1,
};
const fileInputField = document.getElementById("document");
const formData = new FormData();
formData.append("config", JSON.stringify(config, null, 2));
formData.append("file", fileInputField.files[0]);
fetch("http://localhost:8000/format/", {
method: "POST",
body: formData
})
.then(response => response.blob())
.then(blob => {
var a = document.createElement("a");
a.href = window.URL.createObjectURL(blob);
a.download = "Test.docx";
document.body.appendChild(a)
a.click();
})
.catch(error => {
console.error("Error:", error);
})
}
},
views.py format endpoint
def format(request):
config = json.loads(request.POST['config'])
file = request.FILES['file']
# TODO perform some document edits here
document = Document(file)
response = StreamingHttpResponse(
streaming_content = FileWrapper(file),
content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document'
)
response['Content-Disposition'] = 'attachment;filename=Test.docx'
response["Content-Encoding"] = 'UTF-8'
return response
В настоящее время я просто пытаюсь успешно загрузить и скачать файл. Если у кого-то есть какие-либо идеи по исправлению ситуации, я был бы очень признателен. Заранее спасибо!