[英]Using request/request to post file from the browser
我有一個Node.JS項目,服務器端和客戶端由webpack提供支持。 我希望將我的項目從axios
/ request
的組合轉換為使用request
,但是我在從瀏覽器上傳文件時遇到問題。 我正在使用request-promise
庫,但無論是使用request
還是request-promise
,我都有同樣的問題。 我的嘗試是這樣做:
return request.post({
uri: `${BASE_URL}/files`,
formData: {
token: token,
file: {value: filedata, options: {filename: filename}}
}
})
其中filedata
是使用input
標記返回的File
對象,用於在用戶的計算機上查找文件。 我得到的錯誤是:
TypeError: self._form.on is not a function
這似乎是因為formData
需要來自fs
類的可讀流。 如何獲得正確的輸入request
?
在帖子請求中添加標題,這將有助於在您查找時使用流發送文件。
return request.post({
uri: `${BASE_URL}/files`,
formData: {
token: token,
file: {value: filedata, options: {filename: filename}}
},
headers: {'enctype': 'multipart/form-data'}
})
我發現這需要一個非平凡的解決方案才能最終發揮作用。 我使用FileReader
將我從表單收到的File
對象轉換為ArrayBuffer
。 我手動將標題設置為'multipart / form-data',並使用multipart
屬性設置我的所有內容。 最后,我需要將所有這些都包含在Promise
,因此我必須設置對象並適當地調用resolve。
return new Promise((resolve) => {
const fr = new FileReader()
fr.onload = (event) => {
return request({
uri: `${BASE_URL}/files`,
method: 'POST',
headers: {
'content-type': 'multipart/form-data'
},
multipart: {
chunked: false,
data: [
{
'Content-Disposition': 'form-data; name="token"',
body: token
},
{
'Content-Disposition': `form-data; name="file"; `filename="${filename}"`}`,
body: event.target.result
}
]
}
}).then(resolve)
}
fr.readAsArrayBuffer(filedata)
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.