我正在尝试使用多部分表单将音频文件上传到 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

            }

        }

    }

}

如果有人对我收到此错误的原因有任何想法,我将不胜感激。