iT邦幫忙

2

[程式新手] ajax上傳檔案 與node.js後端接收檔案疑問

Q1.前端問題
https://ithelp.ithome.com.tw/upload/images/20200928/20129366ZpfNn4fTqo.png
想用ajax上傳檔案
檔案是預設TXT檔然後內容是JSON格式
我在AJAX中這樣設定dataType:"json"傳送到後端就是JSON了嗎?還是要轉換
已經可以取得檔案資訊但是下面程式好像不運作,我的formData沒有append東西

  form_data.append('file',file_data);  //物件加到file後面

Q2.後端問題
https://ithelp.ithome.com.tw/upload/images/20200928/20129366PNcQvhoUbx.png
在NODE.JS使用MULTER做處理檔案
當我POST 沒有upload.array()可以順利POST 當然也不會接收到東西
可是加了POST就直接500 不知道是否是Q1所導致

附上github:https://github.com/bo-han-kao/BicZone/tree/logintest
會使用到的檔案:routes/upload.js
public/js/upload-data.js
views/upload.ejs
假資料可用加附檔名txt測試:scandata.json

煩請各位大大解惑

愷開 iT邦新手 5 級 ‧ 2020-09-28 19:30:10 檢舉
Q1.
傳送檔案的時候如果以 http request 做傳送沒意外就是 multipart/form-data,跟檔案格式沒有關係。dataType 沒有設定的話預設是 `x-www-form-encoded` 不過我想 jQuery 應該會另外判斷,如果設定成 json 應該是沒辦法成功,或是會幫你把 formData 序列化成 json 資料才對。

> 已經可以取得檔案資訊但是下面程式好像不運作,我的formData沒有append東西
這行程式碼看起來是沒問題的,如果要取得資料細節的話要用 `formData.get(key)`

Q2. 如果有看 multer 的文件的話應該會發現 multer.array() 第一個參數應該是個字串才對,但是在這裡沒有看到你給值,所以才會有錯誤?
可以試著打開 devtools 看看詳細錯誤原因是什麼,這樣會更有頭緒才對。
謝謝指教 有成功了!!

1 個回答

4
dragonH
iT邦超人 5 級 ‧ 2020-09-29 01:32:14
最佳解答

Q1.前端問題

人家 github usage 有說

Don't forget the enctype="multipart/form-data" in your form.

參考

Q2.後端問題

第一個參數不能為空

應該要是你的 field name

image

然後檔案也不會是在 req.body

而是在 req.files

dragonH
依照大大的提點成功了
萬分感謝大大的指導!!

我要發表回答

立即登入回答