github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/03_form/demo06_uploadclient.go (about)

     1  package main
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io"
     7  	"io/ioutil"
     8  	"mime/multipart"
     9  	"net/http"
    10  	"os"
    11  )
    12  
    13  func main() {
    14  	url := "http://localhost:8000/upload"
    15  	filename := "./1.jpg"
    16  	postFile(url, filename)
    17  }
    18  
    19  func postFile(url, filename string) error {
    20  	bodybuf := &bytes.Buffer{}
    21  	bodyWriter := multipart.NewWriter(bodybuf)
    22  	bodyWriter.WriteField("token", "03126ee75b098a46f395694b20ac2eqiu")
    23  	//关键的一步操作
    24  	fileWriter, err := bodyWriter.CreateFormFile("uploadfile", filename)
    25  	if err != nil {
    26  		fmt.Println(err)
    27  		return err
    28  	}
    29  
    30  	// 打开文件句柄
    31  	fh, err := os.Open(filename)
    32  	if err != nil {
    33  		fmt.Println(err)
    34  		return err
    35  	}
    36  
    37  	// 拷贝
    38  	_, err = io.Copy(fileWriter, fh)
    39  	if err != nil {
    40  		return err
    41  	}
    42  	contentType := bodyWriter.FormDataContentType()
    43  	bodyWriter.Close()
    44  
    45  	// post请求
    46  	resp, err := http.Post(url, contentType, bodybuf)
    47  	if err != nil {
    48  		return err
    49  	}
    50  	defer resp.Body.Close()
    51  
    52  	resp_body, err := ioutil.ReadAll(resp.Body)
    53  	if err != nil {
    54  		return err
    55  	}
    56  	fmt.Println(resp.Status)
    57  	fmt.Println(string(resp_body))
    58  	return nil
    59  }