首頁  >  文章  >  後端開發  >  如何解決 Go 中使用「Content-Type: multipart/form-data」發佈時出現「[301 301 永久移動]」錯誤?

如何解決 Go 中使用「Content-Type: multipart/form-data」發佈時出現「[301 301 永久移動]」錯誤?

Susan Sarandon
Susan Sarandon原創
2024-10-29 20:58:02254瀏覽

How to Resolve

使用「Content-Type: multipart/form-data」發布

嘗試使用「Content-Type:」發送POST 請求時multipart /form-data”,您可能會遇到類似“[301 301 Moved Permanently]”的錯誤訊息。當您嘗試將位元組參數和字串參數POST 到API 時,通常會出現此問題。

要解決此錯誤並成功使用multipart/form-data 執行POST 請求,您可以修改Go 程式碼,如下所示:

<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>

此更新的程式碼使用帶有多部分編寫器的multipart /form-data 內容類型來正確建構POST 請求。

以上是如何解決 Go 中使用「Content-Type: multipart/form-data」發佈時出現「[301 301 永久移動]」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn