使用go開發(fā)服務(wù)端上傳文件服務(wù),當(dāng)需要客端采用form表單提交文件的方式時,form表單需要把 enctype 設(shè)置為 multipart/form-data 。
如果客端編寫疏忽,沒有設(shè)置,或設(shè)置成其他的(一般為application/x-www-form-urlencoded),服務(wù)端會不停的報錯。
此時,服務(wù)端可以在接收到訪問時做一下 request.Header 的 Content-Type 判斷。
如果不是 multipart/form-data,則判定客端設(shè)置錯誤。
獲取 Content-Type 的代碼如下:
request.Header.Get("Content-Type")
經(jīng)測試,
客端為multipart/form-data,獲得的結(jié)果是
multipart/form-data; boundary=----WebKitFormBoundary0JsnmjkAfS6UaQYa
客端未做設(shè)置,獲得的結(jié)果是
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類型不正確"), "應(yīng)當(dāng)為multipart/form-data,當(dāng)前為", typeArry[0])
fmt.Fprint(writer, "Content-Type類型不正確, 應(yīng)當(dāng)為multipart/form-data,當(dāng)前為", typeArry[0])
return
}
} else {
cofoxPub.CoFoxShowError(errors.New("Content-Type類型獲取失敗"), "Content-Type長度為0")
return
}
//-----客端上傳文件類型檢查 End------------------------