亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

去除表單數據中前綴的文件名

去除表單數據中前綴的文件名

Go
繁花如伊 2022-10-10 15:51:45
我將文件從 js 發送到我的 golang 服務器:for (var value of formData.values()) {   console.log(value);}// File {name: 'img/<hash_key>.png', lastModified: 1635043863231, lastModifiedDate: Sat Oct 23 2021 23:51:03 GMT-0300 (Brasilia Standard Time), webkitRelativePath: '', size: 969, …}// ...var request = new Request( serverEndpoint, { body: formData, method: "POST", ... })return fetch(request).then(response => { ... })在我的 golang 服務器中,我使用以下代碼來處理來自讀取文件的請求的多部分表單數據if err := r.ParseMultipartForm(32 << 20); err != nil {    ...}for _, fileHeader := range r.MultipartForm.File["files"] {    ...}我希望在 Go 中讀取具有相同文件名的文件,例如,img/<hash_key>.png 但我的服務器正在將 multipart-form 讀取到以下結構:f = {*mime/multipart.Form | 0xc000426090} ├── Value = {map[string][]string} └── File = {map[string][]*mime/multipart.FileHeader}     ├── 0 = files -> len:1, cap:1    │   ├── key = {string} "files"    │   └── value = {[]*mime/multipart.FileHeader} len:1, cap:1    │       └── 0 = {*mime/multipart.FileHeader | 0xc000440000}     │           ├── Filename = {string} "<hash_key>.png" // notice how FileName is missing 'img/' prefix    │           └── ...    └── ...我試圖弄清楚這是如何發生的以及如何防止這個帶前綴,因為我需要這個前綴來正確解析我的文件的上傳路徑編輯:仔細檢查發現我的服務器實際上正在獲取具有正確名稱的文件。調用后r.ParseMultipartForm(32 << 20),我得到以下內容r.Body.src.R.buf:------WebKitFormBoundary1uanPdXqZeL8IPUHContent-Disposition: form-data; name="files"; filename="img/upload.svg"                                            ---- notice the img/ prefixContent-Type: image/svg+xml<svg height="512pt" viewBox= ...然而,在 中r.MultipartForm.File["files"][0].FileName,它顯示為upload.svg
查看完整描述

1 回答

?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

該目錄在 Part.FileName() 中被刪除:

// RFC 7578, Section 4.2 requires that if a filename is provided, the

// directory path information must not be used.

return filepath.Base(filename)

解決方法 Part.FileName() 通過直接解析內容處置標頭。


for _, fileHeader := range r.MultipartForm.File["files"] {

    _, params, _ := mime.ParseMediaType(fileHeader.Header.Get("Content-Disposition"))

    filename := params["filename"]

    if filename == "" {

         // TODO: Handle unexpected content disposition 

         // header (missing header, parse error, missing param).

    }


查看完整回答
反對 回復 2022-10-10
  • 1 回答
  • 0 關注
  • 368 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號