"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo resolver el error \"[301 301 movido permanentemente]\" al publicar con \"Tipo de contenido: multipart/form-data\" en Go?

¿Cómo resolver el error \"[301 301 movido permanentemente]\" al publicar con \"Tipo de contenido: multipart/form-data\" en Go?

Publicado el 2024-11-10
Navegar:502

How to Resolve \

Publicación con "Tipo de contenido: multipart/form-data"

Al intentar enviar una solicitud POST con "Tipo de contenido: multipart/form-data", es posible que encuentre un mensaje de error como "[301 301 movido permanentemente]". Este problema suele ocurrir cuando intentas PUBLICAR parámetros de bytes y argumentos de cadena en una API.

Para resolver este error y realizar con éxito una solicitud POST con datos multiparte/formulario, puedes modificar tu código Go de la siguiente manera:

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 actualizado utiliza un tipo de contenido de datos de formulario/multiparte con un escritor de varias partes para construir correctamente la solicitud POST. Puede proporcionar la URL de su API, el mapa de texto de parámetros y el elemento de archivo a la función NewPostFile para realizar una solicitud exitosa.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3