golang实现文件自动上传

golang文件自动上传

1. 最近由于在写论文,论文有时候没有保存,还会担心文件丢失等问题,觉得不如写一个脚本,定时上传到服务器,有备无患

1首先肯定是定时的去上传文件,请求方式肯定是POST请求,数据格式采用 multipart/form-data形式,先完成定时任务,这个定时任务的时间最好我们能自己设置(比如多少分钟上传一次)

core函数实现定时任务

func core(t time.Duration) {
	log.Printf("任务启动,间隔 %v 上传一次", t)
	times := time.NewTicker(t)
	for {
		select {
		case date := <-times.C:
			//     执行上传
			log.Println("开始上传", date.Format(time.DateTime))
			err := upload(filePath)
			if err != nil {
				// 处理错误
				log.Println("上传出错 err:", err)
				return
			}
			log.Println("结束上传", time.Now().Format(time.DateTime))
			log.Printf("耗时:%v 秒", time.Now().Sub(date).Seconds())
			log.Printf("距离下次上传 %v 分钟", t.Minutes())

		}
	}
}

2 接下来是最重要的上传

upload函数实现上传

func upload(filePath string) error {
	//     文件
	url := "api接口,这个需要自己实现"
	// 创建表单
	body := &bytes.Buffer{}
	writer := multipart.NewWriter(body)

	file, err := os.Open(filePath)
	if err != nil {
		return err
	}

	part, err := writer.CreateFormFile("file", filepath.Base(filePath))
	if err != nil {
		return err
	}
	_, err = io.Copy(part, file)
	if err != nil {
		return err
	}
	writer.Close()
	file.Close()
	resp, err := http.Post(url, writer.FormDataContentType(), body)
	if err != nil {
		return err
	}
	_, err = io.ReadAll(resp.Body)
	if err != nil {
		return err
	}
	defer resp.Body.Close()
	if resp.StatusCode == 200 {
		log.Println("上传文件成功")
	}
	return nil
}

3主函数

var duration int
var filePath string

func main() {
	flag.StringVar(&filePath, "filePath", "默认的论文的绝对路径", "论文的路径")
	flag.IntVar(&duration, "duration", 20, "多久提交一次")
	// 解析命令行参数
	flag.Parse()
	dir := filepath.Dir(filePath)
	fielename := filepath.Base(filePath)

	filePath = dir + "\\" + fielename
	fmt.Println(filePath)
	t := time.Minute * time.Duration(duration)
	core(t)
}

4打包为exe文件(window)平台

go build -o upload.exe  -ldflags "-s  -w"

5 执行

//10分钟执行一次
.\upload.exe  -duration 10   

2. 执行效果

在这里插入图片描述

  • 16
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值