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

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

Ajax 上傳文件到 GoLang 服務器,內容類型為 Multipart

Ajax 上傳文件到 GoLang 服務器,內容類型為 Multipart

Go
慕容708150 2021-08-10 20:37:22
我正在嘗試使用多部分表單將音頻文件上傳到 Golang 服務器。但是,Go 返回錯誤:multipart: NextPart: bufio: buffer full我相信這表明我的 Javascript 請求中沒有多部分格式的內容。這是我的Javascript:function UploadFile(file) {    var xhr = new XMLHttpRequest();    if (file.type == "audio/mpeg" && file.size <= $id("MAX_FILE_SIZE").value) {        // start upload        var boundary = '---------------------------' + Math.floor(Math.random()*32768) + Math.floor(Math.random()*32768) + Math.floor(Math.random()*32768);        xhr.open("POST", $id("upload").action, true);        xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary);        xhr.setRequestHeader("X_FILENAME", file.name);        xhr.send(file);    }}這是我的 Golang 服務器處理程序:func FileHandler(w http.ResponseWriter, r *http.Request) {    var (        status int        err    error    )    defer func() {        if nil != err {            http.Error(w, err.Error(), status)        }    }()    // parse request with maximum memory of _24Kilobits    const _24K = (1 << 20) * 24    if err = r.ParseMultipartForm(_24K); nil != err {        fmt.Println(err)        status = http.StatusInternalServerError        return    }    for _, fheaders := range r.MultipartForm.File {        for _, hdr := range fheaders {            // open uploaded            var infile multipart.File            if infile, err = hdr.Open(); nil != err {                status = http.StatusInternalServerError                return            }            // open destination            var outfile *os.File            if outfile, err = os.Create("./uploaded/" + hdr.Filename); nil != err {                status = http.StatusInternalServerError                return            }            // 32K buffer copy            var written int64            if written, err = io.Copy(outfile, infile); nil != err {                status = http.StatusInternalServerError                return            }        }    }}如果有人對我收到此錯誤的原因有任何想法,我將不勝感激。
查看完整描述

2 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

在與 Ajax 請求進行了漫長而艱苦的斗爭之后,我讓它發送了正確的信息。這是我使用的代碼:


var xhr = new XMLHttpRequest(),

    boundary=Math.random().toString().substr(2);


var formdata = new FormData();

formdata.append("file", file);


xhr.open("POST", $id("upload").action, true);

//xhr.setRequestHeader("content-type", "multipart/form-data; charset=utf-8; boundary=" + boundary);

xhr.send(formdata);

請注意標題不再使用,我發現您可以比任何其他方法更容易地將數據附加到 formdata


查看完整回答
反對 回復 2021-08-10
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

不確定這個答案是否適合您,但我能夠form-data在客戶端使用 ajax 上傳文件,并在服務器上使用以下 Go 代碼小片段:


file, handler, err := r.FormFile("img") // img is the key of the form-data

if err != nil {

    fmt.Println(err)

    return

}

defer file.Close()


fmt.Println("File is good")

fmt.Println(handler.Filename)

fmt.Println()

fmt.Println(handler.Header)



f, err := os.OpenFile(handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)

if err != nil {

    fmt.Println(err)

    return

}

defer f.Close()

io.Copy(f, file)

這r是*http.Request。PS 這只是將文件存儲在同一文件夾中,不執行任何安全檢查。


查看完整回答
反對 回復 2021-08-10
  • 2 回答
  • 0 關注
  • 487 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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