"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como resolver o erro \"[301 301 movido permanentemente]\" ao postar com \"Content-Type: multipart/form-data\" no Go?

Como resolver o erro \"[301 301 movido permanentemente]\" ao postar com \"Content-Type: multipart/form-data\" no Go?

Publicado em 2024-11-10
Navegar:876

How to Resolve \

Postagem com "Content-Type: multipart/form-data"

Ao tentar enviar uma solicitação POST com "Content-Type: multipart/form-data", você pode encontrar uma mensagem de erro como "[301 301 movido permanentemente]." Esse problema normalmente ocorre quando você tenta POST parâmetros de byte e argumentos de string em uma API.

Para resolver esse erro e executar com êxito uma solicitação POST com multipart/form-data, você pode modificar seu código Go da seguinte maneira:

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
}

Este código atualizado usa um tipo de conteúdo multipart/form-data com um gravador multipart para construir corretamente a solicitação POST. Você pode fornecer o URL da API, o mapa de texto do parâmetro e o item de arquivo para a função NewPostFile para executar uma solicitação bem-sucedida.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3