บทนี้จะแนะนำวิธีการอัปโหลดและดาวน์โหลดไฟล์โดยใช้ไลบรารี Go Resty

## Multipart File Upload

อัปโหลดไฟล์ผ่านคำขอ Multipart POST
```go
// อ่านไฟล์สองไฟล์ก่อน
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": "เมืองของฉัน",
        "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")