使用“Content-Type: multipart/form-data”发布
尝试发送带有“Content-Type: multipart/form-data”的 POST 请求时multipart/form-data”,您可能会遇到类似“[301 301 Moved Permanently]”的错误消息。当您尝试将字节参数和字符串参数 POST 到 API 时,通常会出现此问题。
要解决此错误并使用 multipart/form-data 成功执行 POST 请求,您可以修改 Go 代码,如下所示:
func NewPostFile(url string, paramTexts map[string]interface{}, paramFile FileItem) ([]byte, error) {
// Create a multipart body buffer and writer
bodyBuf := &bytes.Buffer{}
bodyWriter := multipart.NewWriter(bodyBuf)
// Add string parameters
for k, v := range paramTexts {
bodyWriter.WriteField(k, v.(string))
}
// Add file parameter
fileWriter, err := bodyWriter.CreateFormFile(paramFile.Key, paramFile.FileName)
if err != nil {
return nil, err
}
fileWriter.Write(paramFile.Content)
// Set content type
contentType := bodyWriter.FormDataContentType()
// Close the writer
bodyWriter.Close()
resp, err := http.Post(url, contentType, bodyBuf)
if err != nil {
return nil, err
}
defer resp.Body.Close()
// Handle response status
if resp.StatusCode = 300 {
b, _ := ioutil.ReadAll(resp.Body)
return nil, fmt.Errorf("[%d %s]%s", resp.StatusCode, resp.Status, string(b))
}
// Read response data
respData, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return respData, nil
}
// Define FileItem type to represent file parameters
type FileItem struct {
Key string // e.g. "image_content"
FileName string // e.g. "test.jpg"
Content []byte // Byte array of the file
}
此更新的代码使用带有多部分编写器的 multipart/form-data 内容类型来正确构造 POST 请求。您可以向 NewPostFile 函数提供 API URL、参数文本映射和文件项以执行成功的请求。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3