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!