Heim  >  Artikel  >  Backend-Entwicklung  >  Wie behebe ich den Fehler „[301 301 dauerhaft verschoben]' beim Posten mit „Content-Type: multipart/form-data' in Go?

Wie behebe ich den Fehler „[301 301 dauerhaft verschoben]' beim Posten mit „Content-Type: multipart/form-data' in Go?

Susan Sarandon
Susan SarandonOriginal
2024-10-29 20:58:02253Durchsuche

How to Resolve

Posten mit „Content-Type: multipart/form-data“

Beim Versuch, eine POST-Anfrage mit „Content-Type: multipart/form-data“ erhalten Sie möglicherweise eine Fehlermeldung wie „[301 301 Moved Permanently].“ Dieses Problem tritt normalerweise auf, wenn Sie versuchen, Byte-Parameter und String-Argumente per POST an eine API zu senden.

Um diesen Fehler zu beheben und eine POST-Anfrage mit Multipart-/Formulardaten erfolgreich durchzuführen, können Sie Ihren Go-Code wie folgt ändern:

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

Dieser aktualisierte Code verwendet einen mehrteiligen/Formulardaten-Inhaltstyp mit einem mehrteiligen Writer, um die POST-Anfrage korrekt zu erstellen. Sie können der NewPostFile-Funktion Ihre API-URL, Parametertextzuordnung und Dateielement bereitstellen, um eine erfolgreiche Anfrage auszuführen.

Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „[301 301 dauerhaft verschoben]' beim Posten mit „Content-Type: multipart/form-data' in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn