Este capítulo introduce los métodos para subir y descargar archivos usando la biblioteca Go Resty.

Subida de archivos multipartes

Subir archivos mediante una solicitud POST multipartes

// Primero, leer dos archivos
profileImgBytes, _ := os.ReadFile("/Users/jeeva/test-img.png")
notesBytes, _ := os.ReadFile("/Users/jeeva/text-file.txt")

// Crear un cliente Resty
cliente := resty.New()

// Utilizar SetFileReader para establecer el archivo y los parámetros automáticamente para la subida
// Utilizar SetFormData para establecer otros parámetros del formulario
resp, err := client.R().
      SetFileReader("profile_img", "test-img.png", bytes.NewReader(profileImgBytes)).
      SetFileReader("notes", "text-file.txt", bytes.NewReader(notesBytes)).
      SetFormData(map[string]string{
          "first_name": "Jeevanandam",
          "last_name": "M",
      }).
      Post("http://www.tizi365.com/upload")

Subida directa de archivos locales

Esto es más conveniente que el anterior, ya que puede subir archivos locales directamente sin necesidad de leer primero el archivo.

// Crear un cliente Resty
cliente := resty.New()

// Utilizar SetFile para establecer el archivo a subir y el campo de parámetro de solicitud asociado
resp, err := client.R().
      SetFile("profile_img", "/Users/jeeva/test-img.png").
      Post("http://myapp.com/upload")

// Subir archivos en lotes utilizando SetFiles
resp, err := client.R().
      SetFiles(map[string]string{
        "profile_img": "/Users/jeeva/test-img.png",
        "notes": "/Users/jeeva/text-file.txt",
      }).
      Post("http://myapp.com/upload")

// Subir archivos en lotes y establecer otros parámetros del formulario al mismo tiempo
resp, err := client.R().
      SetFiles(map[string]string{
        "profile_img": "/Users/jeeva/test-img.png",
        "notes": "/Users/jeeva/text-file.txt",
      }).
      SetFormData(map[string]string{
        "first_name": "Jeevanandam",
        "last_name": "M",
        "zip_code": "00001",
        "city": "mi ciudad",
        "access_token": "C6A79608-782F-4ED0-A11D-BD82FAD829CD",
      }).
      Post("http://myapp.com/profile")

Descarga de archivos

// Crear un cliente Resty
cliente := resty.New()

// Establecer el directorio de salida de archivos, Resty creará automáticamente si no existe
// Esta configuración es opcional si se establece el parámetro SetOutput con una ruta absoluta.
client.SetOutputDirectory("/Users/tizi365/Downloads")

// Enviar aquí una solicitud HTTP y guardar el resultado de la solicitud en la ruta de archivo establecida por el parámetro SetOutput
_, err := cliente.R().
          SetOutput("plugin/ReplyWithHeader-v5.1-beta.zip").
          Get("http://bit.ly/1LouEKr")

// Aquí hay un ejemplo usando una ruta absoluta
_, err := cliente.R().
          SetOutput("/MyDownloads/plugin/ReplyWithHeader-v5.1-beta.zip").
          Get("http://bit.ly/1LouEKr")