golang 模拟文件上传

package main

import (
	"bytes"
	"fmt"
	"io"
	"mime/multipart"
	"net/http"
	"os"
)

func main() {
	flag := fileUpload("./xml.go")
	fmt.Println(flag)
}

func fileUpload(file_path string) bool {
	var (
		f           *os.File
		err         error
		file_writer io.Writer
	)

	body_buf := &bytes.Buffer{}
	//创建新的写入
	send_writer := multipart.NewWriter(body_buf)
	//创建form 上传文件
	if file_writer, err = send_writer.CreateFormFile("upfile", file_path); err != nil {
		fmt.Println("CreateFormFile :", err)
		return false
	}

	//打开要发送的文件
	if f, err = os.Open(file_path); err != nil {
		fmt.Println("open:", err)
		return false
	}
	defer f.Close()
	//将文件资源 copy 给要发送的数据
	if _, err = io.Copy(file_writer, f); err != nil {
		fmt.Println("copy:", err)
		return false
	}
	//如果你还想发送一些数据 可以调用
	//	err = send_writer.WriteField(字段,值)
	//获取提交from 数据类型
	from_type := send_writer.FormDataContentType()
	//直接关闭写入 否则会少文件数据结尾
	send_writer.Close()
	r, r_err := http.Post("http://www.xiaochuan.com/index.php", from_type, body_buf)
	if r_err != nil {
		fmt.Println("post:", r_err)
		return false
	}
	//如果上传状态码不为200
	if r.StatusCode != http.StatusOK {
		fmt.Println("http status is ", r.StatusCode)
		return false
	}
	return true
}

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页