一架梯子,一头程序猿,仰望星空!
Go Resty教程 > 内容正文

Go Resty文件上传/下载


本章介绍Go Resty库文件上传和下载的方法。

Multipart 文件上传

通过Multipart POST请求上传文件

// 先读取2个文件
profileImgBytes, _ := os.ReadFile("/Users/jeeva/test-img.png")
notesBytes, _ := os.ReadFile("/Users/jeeva/text-file.txt")

// 创建 Resty 客户端
client := resty.New()

// 通过SetFileReader设置上传的文件和参数自动
// SetFormData设置其他表单参数
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")

直接上传本地文件

这里比上面的更方便,可以直接把本地的文件上传,不需要先读取文件。

// 创建 Resty 客户端
client := resty.New()

// 通过SetFile设置上传的文件和绑定的请求参数字段
resp, err := client.R().
      SetFile("profile_img", "/Users/jeeva/test-img.png").
      Post("http://myapp.com/upload")

// 通过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")

// 批量上传文件,同时设置其他表单参数
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": "my city",
        "access_token": "C6A79608-782F-4ED0-A11D-BD82FAD829CD",
      }).
      Post("http://myapp.com/profile")

下载文件

// 创建 Resty 客户端
client := resty.New()

// 设置文件输出目录,不存在resty会自动创建
// 如果SetOutput参数设置绝对路径,这个的设置就是可选的。
client.SetOutputDirectory("/Users/tizi365/Downloads")

// 这里发送一个http请求,然后把请求结果保存到SetOutput参数设置的文件路径
_, err := client.R().
          SetOutput("plugin/ReplyWithHeader-v5.1-beta.zip").
          Get("http://bit.ly/1LouEKr")

// 这里是使用绝对路径的例子
_, err := client.R().
          SetOutput("/MyDownloads/plugin/ReplyWithHeader-v5.1-beta.zip").
          Get("http://bit.ly/1LouEKr")