使用go开发服务端上传文件服务,当需要客端采用form表单提交文件的方式时,form表单需要把 enctype 设置为 multipart/form-data 。
如果客端编写疏忽,没有设置,或设置成其他的(一般为application/x-www-form-urlencoded),服务端会不停的报错。
此时,服务端可以在接收到访问时做一下 request.Header 的 Content-Type 判断。
如果不是 multipart/form-data,则判定客端设置错误。
获取 Content-Type 的代码如下:
request.Header.Get("Content-Type")
经测试,
客端为multipart/form-data,获得的结果是
multipart/form-data; boundary=----WebKitFormBoundary0JsnmjkAfS6UaQYa
客端未做设置,获得的结果是
application/x-www-form-urlencoded
完整检测代码
//-----客端上传文件类型检查 Begin----------------------
typeArry := strings.Split(request.Header.Get("Content-Type"), ";")
if len(typeArry) > 0 {
if "multipart/form-data" == typeArry[0] {
cofoxPub.LogSysPrintln("logsys", "上传文件Content-Type检查通过")
} else {
cofoxPub.CoFoxShowError(errors.New("Content-Type类型不正确"), "应当为multipart/form-data,当前为", typeArry[0])
fmt.Fprint(writer, "Content-Type类型不正确, 应当为multipart/form-data,当前为", typeArry[0])
return
}
} else {
cofoxPub.CoFoxShowError(errors.New("Content-Type类型获取失败"), "Content-Type长度为0")
return
}
//-----客端上传文件类型检查 End------------------------