Maison  >  Article  >  développement back-end  >  Comment résoudre l'erreur \'[301 301 Moved Permanently]\' lors de la publication avec \'Content-Type: multipart/form-data\' dans Go ?

Comment résoudre l'erreur \'[301 301 Moved Permanently]\' lors de la publication avec \'Content-Type: multipart/form-data\' dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-29 20:58:02254parcourir

How to Resolve

Publication avec « Content-Type : multipart/form-data »

Lors de la tentative d'envoi d'une requête POST avec « Content-Type : multipart/form-data", vous pouvez rencontrer un message d'erreur du type "[301 301 Moved Permanently]." Ce problème se produit généralement lorsque vous essayez de POST des paramètres d'octet et des arguments de chaîne vers une API.

Pour résoudre cette erreur et exécuter avec succès une requête POST avec multipart/form-data, vous pouvez modifier votre code Go comme suit :

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

Ce code mis à jour utilise un type de contenu multipart/form-data avec un rédacteur multipart pour construire correctement la requête POST. Vous pouvez fournir l'URL de votre API, la carte de texte des paramètres et l'élément de fichier à la fonction NewPostFile pour effectuer une requête réussie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn