![](/img/trans.png)
[英]How to remove Content-Type from multipart/form-data Body Request?
[英]How to extract the Content-Type of a file sent via multipart/form-data
我在我的 cloudflare 工作器中收到一個請求,並希望將數據上傳到 Google 雲存儲。 我的問題是我無法從收到的 multipart/form-data 數據中提取內容類型,以便使用正確的內容類型將其上傳到 GCS。
當我使用await req.formData()
讀取請求時,我可以從 formData 中get('file')
並返回 GCS 所需的原始文件數據,但我似乎無法在任何地方看到文件內容 -我需要的類型(我只有在查看原始請求正文時才能看到它)。
這是我的(精簡)代碼:
event.respondWith((async () => {
const req = event.request
const formData = await req.formData()
const file = formData.get('file')
const filename = formData.get('filename')
const oauth = await getGoogleOAuth()
const gcsOptions = {
method: 'PUT',
headers: {
Authorization: oauth.token_type + ' ' + oauth.access_token,
'Content-Type': 'application/octet-stream' //this should by `'Content-Type': file.type`
},
body: file,
}
const gcsRes = await fetch(
`https://storage.googleapis.com/***-media/${filename}`,
gcsOptions,
)
if (gcsRes.status === 200) {
return new Response(JSON.stringify({filename}), gcsRes)
} else {
return new Response('Internal Server Error', {status: 500, statusText: 'Internal Server Error'})
}
})())
提醒 - 該代碼是我們的 cloudflare 工作器代碼的一部分。
在我看來,這應該是直截了當的,確定您從 multipart/form-data 數據中提取的文件類型。 我錯過了什么嗎?
不幸的是,在撰寫本文時,FormData 的 Cloudflare Workers 實現尚不完整,並且不允許提取 Content-Type。 事實上,我們的實現目前似乎將所有條目解釋為文本並返回字符串,這意味着二進制內容將被破壞。 這是一個需要小心修復的錯誤,因為我們不想破壞可能依賴於錯誤行為的已經部署的腳本。
感謝肯頓的回復。
我最終做了什么:
由於 Cloudflare Workers 不支持 Blob 的multipart/form-data
或 String 以外的任何類型,我最終使用了ArrayBuffer
數據類型中的原始字節。 將其轉換為Uint8Array
我逐字節解析它以確定文件類型以及文件數據的開始和結束索引。 找到傳輸文件的開頭和結尾后,我就可以創建文件數據數組,將其添加到請求中並將其發送到 GCS,如上所示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.