golang ajax 文件,javascript – Ajax上传文件到内容类型为Multipart的GoLang服务器

在尝试使用多部分表单上传音频文件到Golang服务器时遇到问题,服务器返回“multipart: NextPart: bufio: buffer full”的错误。通过检查JavaScript和Golang的代码,发现Ajax请求中的Content-Type设置有误。修正后的解决方案是使用FormData对象并将文件直接添加到其中,然后发送。这样可以确保Ajax请求正确地以多部分格式发送文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}

w.Write([]byte("uploaded file:" + hdr.Filename + ";length:" + strconv.Itoa(int(written))))

}

}

}

如果有人有任何想法我为什么会收到这个错误,我会非常感激.

解决方法:

经过与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);

标签:javascript,ajax,go,multipart,html

来源: https://codeday.me/bug/20190703/1363421.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值