"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-10
Parcourir:138

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 :

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
}

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 mappe de texte des paramètres et l'élément de fichier à la fonction NewPostFile pour exécuter une requête réussie.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3