从网络上下载文件到本地


1、安装uuid包,用于生成文件名称

参考:

2、目录结构

 3、download.go

package download

import (
	"demo/common/uuid"
	"fmt"
	"io/ioutil"
	"net/http"
	"strings"
)

func DownLoad(url string, storage string, suffix string) (ret string, err error) {
	var picname = ""
	//判断url是否可以访问
	v, err := http.Get(url)
	if err != nil {
		fmt.Printf("请求地址无法访问: [%v] failed! %v", url, err)
		return "", err
	}
	//按照 / 对下载路径进行分割
	idx := strings.LastIndex(url, "/")
	if idx < 0 {
		storage += "/" + url
	} else {
		//获取文件名,使用 . 对文件名进行分割获取文件的后缀名
		idx2 := strings.LastIndex(url[idx+1:], ".")
		//如果后缀大于4则付给默认后缀
		if len(url[idx+1:][idx2+1:]) > 4 {
			//对文件重命名 uuid+文件后缀
			picname += uuid.GetUuid32() + "." + suffix
		} else {
			picname += uuid.GetUuid32() + "." + url[idx+1:][idx2+1:]
		}
		storage = storage + picname
	}
	defer v.Body.Close()
	content, err := ioutil.ReadAll(v.Body)
	if err != nil {
		fmt.Printf("Read http response failed! %v", err)
		return "", err
	}
	err = ioutil.WriteFile(storage, content, 0666)
	if err != nil {
		fmt.Printf("Save to file failed! %v", err)
		return "", err
	}
	return picname, nil
}

4、main.go

package main

import (
	"demo/common/download"
	"fmt"
)

func main() {
	var url = "https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"
	imgname, err := download.DownLoad(url, "downloadimg/", "png")
	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Println(imgname)
	}
}

  

Go