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
Release: 2024-10-29 20:58:02
Original
289 people have browsed it

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>
Copy after login

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template