Posting with "Content-Type: multipart/form-data"
When attempting to send a POST request with "Content-Type: multipart/form-data," you may encounter an error message like "[301 301 Moved Permanently]." This issue typically occurs when you try to POST byte parameters and string arguments to an API.
To resolve this error and successfully perform a POST request with multipart/form-data, you can modify your Go code as follows:
<code class="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 < 200 || 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 }</code>
This updated code uses a multipart/form-data content type with a multipart writer to correctly construct the POST request. You can provide your API URL, parameter text map, and file item to the NewPostFile function to perform a successful request.
The above is the detailed content of How to Resolve \'[301 301 Moved Permanently]\' Error When Posting with \'Content-Type: multipart/form-data\' in Go?. For more information, please follow other related articles on the PHP Chinese website!