我正在創建一個網站,我需要制作一個后端 POST 服務器。我已經創建了 90%,但我面臨的問題是我需要發送 JSON 和 pdf(通常由 multipart/form-data 發送,但需要不同的路由)。我想要做的是將檔案轉換為 base64string,在請求中發送它,然后將其恢復并寫入檔案。整個事情發生了,PDF甚至回傳了加擾的資料,但即使在轉換回二進制并撰寫
HTML端JS代碼后,PDF也只是一個空白頁:
async function post(endpoint){
let binaryCV;
let CV = document.getElementById("upfile").files[0];
var reader = new FileReader();
reader.onload = (readerEvt)=>{
var binaryString = readerEvt.target.result;
binaryCV = binaryString;
let xhr = new XMLHttpRequest();
let object = {
name: document.getElementById("ecaName").value,
email: document.getElementById("ecaEmail").value,
phone: document.getElementById("ecaTel").value,
class: document.getElementById("ecaClass").value,
institute: document.getElementById("ecaInstitute").value,
paragraph:{
experience: document.getElementById("ecaExp").value,
why: document.getElementById("ecaWhyPart").value,
changes: document.getElementById("ecaWhatChanges").value,
},
CV: binaryCV,
}
xhr.open("POST", `http://localhost:8080/apply/internship/${endpoint}`,true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify(object));
};
await reader.readAsBinaryString(CV);
/*xhr.onload = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML = xhttp.responseText;
}
};*/
}
服務端JS回呼:
app.post('/apply/internship/econoxe', async (req, res)=>{
res.sendStatus(200);
let CV = req.body.CV;
fs.writeFileSync(path.join(__dirname,`../CV/${req.body.email}.pdf`),CV)
console.log(req.body);
})
無論我上傳什么 PDF,所有這些都會回傳 100% 的空白 PDF(由于某種原因,檔案大小比原始檔案大)
請幫助
如果您知道在一個請求和路由中執行我的意思的任何其他方法,請告訴!
uj5u.com熱心網友回復:
您可以使用FormData()將任何檔案發送到后端。改用它FileReader()并將您的資料附加到它
const fromData = new FromData();
fromData.append("pdf", document.getElementById("upfile").files[0]);
fromData.append("email", document.getElementById("ecaEmail").value;
然后發布 formData 并在您的發布路線中從req.file或獲取“pdf” req.files。
uj5u.com熱心網友回復:
我找到了答案!
我不得不改變
fs.writeFileSync(path.join(__dirname,`../CV/${req.body.email}.pdf`),CV)
到
fs.writeFileSync(path.join(__dirname,`../CV/${req.body.email}.pdf`),CV,"binary")
這將解決問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/311207.html
標籤:javascript pdf 邮政 上传 FS
