บทนี้จะแนะนำวิธีการอัปโหลดและดาวน์โหลดไฟล์โดยใช้ไลบรารี 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")