„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 10.11.2024
Durchsuche:628

How to Resolve \

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

Beim Versuch, eine POST-Anfrage mit „Content-Type:“ zu senden multipart/form-data“ erhalten Sie möglicherweise eine Fehlermeldung wie „[301 301 Permanent verschoben].“ 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:

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

Dieser aktualisierte Code verwendet einen Multipart-/Formulardaten-Inhaltstyp mit einem Multipart-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.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3