Home >Backend Development >Golang >How to Resolve \'[301 301 Moved Permanently]\' Error When Posting with \'Content-Type: multipart/form-data\' in Go?

How to Resolve \'[301 301 Moved Permanently]\' Error When Posting with \'Content-Type: multipart/form-data\' in Go?

Susan Sarandon
Susan SarandonOriginal
2024-10-29 20:58:02265browse

How to Resolve

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn