我試圖做的NodeJS和jQuery - 傳遞和保存的二進制文件
上傳來自瀏覽器的二進制文件(在這種情況下的.docx),並將其保存在服務器上。在服務器上使用NodeJs/ExpressJS。
問題
我可以成功地從客戶端向服務器傳送文本文件(以.json/.TXT/.CSV),併成功挽救,但我似乎無法做到這一點的二進制文件。我得到了「沒有從文本到二進制的轉換」錯誤,其中沒有數據的文件損壞或內部錯誤。
客戶端
輸入上傳後,我打電話
fRead.readAsArrayBuffer(fName);
的$就調用
$.ajax({
url: url,
type: 'POST',
data: obj, //the obj is the e.target.result from FileReader
contentType: 'application/octet-stream',
dataType: 'binary',
success: function (data) {
cbFn(data.msg);
},
error: function (xhr, status, error) {
alert("error " + status + " " + error);
}
});
服務器端
在服務器側
fs.writeFile(saveFile, req.body, 'binary', (err) => {
if (err) throw err;
console.log('file saved to ' + saveFile);
});
現在在服務器端,上面的代碼引發錯誤「從文本到二進制沒有轉換」,儘管它保存該文件(損壞,無數據)。如果我將其更改爲
fs.writeFile(saveFile, Buffer.from(req.body), 'binary', (err) => {
if (err) throw err;
console.log('file saved to ' + saveFile);
});
我剛剛得到一個內部錯誤。
在這一點上,我不知道我的錯誤在哪裏 - 是我在$ .ajax調用中使用了錯誤的編碼類型嗎?或者我在fs.writeFile中的選項是錯誤的,或者我可能根本不應該使用fs.writeFile和其他東西?我覺得有這麼多的排列,所以我可以用一點幫助。
也感到驚訝這是很難找到一個很好的在線文章這種情況下 - 我只是想上傳一個二進制文件並保存!
我不知道你是如何創建的文件。一旦我有了fileReader對象,在發送給服務器之前,我需要做些什麼來讀取內容?我嘗試了上面的方法,只需傳遞fileReader.onload = function(e)中的'e',以及e.target和e.target.result即可。不起作用。 nodejs服務器顯示它沒有req.body ... – Gerry
擰上FileReader ...我假設'fName'是blob,所以只需將fName作爲'data' – Endless