#javascript #reactjs #django-rest-framework #jspdf #html2canvas
#javascript #reactjs #django-rest-framework #jspdf #html2canvas
Вопрос:
Попытка сгенерировать PDF-файл в react js, а затем отправить его на серверную часть django rest.
Я успешно создал PDF-файл с использованием jsPDF и html2canvas, но теперь не могу отправить в rest api, всякий раз, когда я отправляю, он выдает мне ответ «Файл не был отправлен».Я проверил django-rest api, и он работает нормально, PDF не передается в rest API.Вот мой приведенный ниже код:
genPDF=(evt)=>{
evt.preventDefault();
html2canvas(document.getElementById("pdfid")).then(canvas=>{
let img=canvas.toDataURL('img/png');
let doc=new JsPDF();
doc.addImage(img,'JPEG',30,30);
//doc.save('test.pdf');
let file=doc;
const formdata=new FormData();
formdata.append("file",file);
this.postpdf(formdata)
});
};
postpdf=(payload)=>{
fetch(`http://127.0.0.1:8000/chauffeur/pdf_upload/`,
{
method: 'POST',
body: JSON.stringify(payload),
headers: {
'Content-Type': 'application/json'
}
}
).then(response => response.json()).catch(error => console.error('Error:', error));
};
Заголовки запроса
Content-Type: multipart/form-data; boundary=----
WebKitFormBoundaryEueEwtpzbquHU6Tb
Origin: http://localhost:3000
Referer: http://localhost:3000/contractinvoice
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/73.0.3683.86 Safari/537.36
Заголовки ответов
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:3000
Allow: GET, POST, HEAD, OPTIONS
Content-Length: 76
Content-Type: application/json
Date: Wed, 10 Apr 2019 05:44:49 GMT
Server: WSGIServer/0.2 CPython/3.5.2
Vary: Accept, Cookie, Origin
X-Frame-Options: SAMEORIGIN
Я думаю, что я отправляю файл неправильно, но не могу его отсортировать, в чем проблема, нужны предложения.Спасибо
Комментарии:
1. Эй, я нахожусь в похожей ситуации, и я еще не нашел решения. Было интересно, сделали ли вы это? Пожалуйста, дайте мне знать
Ответ №1:
Здесь у вас ошибка:
'Content-Type': 'application/json'
Если вы хотите отправить файл, вам следует использовать multipart /form-data
Ответ №2:
почему вы хотите преобразовать полезную нагрузку в JSON.stringify() … полезная нагрузка не json… попробуйте это…
postpdf=(payload)=>{
fetch(`http://127.0.0.1:8000/chauffeur/pdf_upload/`,
{
method: 'POST',
body: payload,
headers: {
'Content-Type': 'multipart/form-data'
}
}
).then(response => response.json()).catch(error => console.error('Error:', error));
};
Комментарии:
1. добавлено в мой вопрос, пожалуйста, проверьте.