从网络上下载文件到本地
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)
}
}