56 lines
1.1 KiB
Plaintext
56 lines
1.1 KiB
Plaintext
|
|
package fileUtil
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"io"
|
|||
|
|
"net/http"
|
|||
|
|
"os"
|
|||
|
|
"path"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// 下载网络文件
|
|||
|
|
// netUrl:网络文件地址
|
|||
|
|
// saveDir:存储位置
|
|||
|
|
// saveFileName:存储的文件名
|
|||
|
|
// ifTruncate:如果文件存在了,是否覆盖此文件
|
|||
|
|
// 返回值:
|
|||
|
|
// err:错误对象
|
|||
|
|
func DownLoadNetFile(netUrl string, saveDir string, saveFileName string, ifTruncate bool) (err error) {
|
|||
|
|
resp, err := http.Get(netUrl)
|
|||
|
|
defer func() {
|
|||
|
|
if resp != nil {
|
|||
|
|
resp.Body.Close()
|
|||
|
|
}
|
|||
|
|
}()
|
|||
|
|
if err != nil {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 创建文件夹
|
|||
|
|
if IsDirExists(saveDir) == false {
|
|||
|
|
os.MkdirAll(saveDir, os.ModePerm|os.ModeTemporary)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 创建文件
|
|||
|
|
filePath := path.Join(saveDir, saveFileName)
|
|||
|
|
var fileObj *os.File
|
|||
|
|
if ifTruncate {
|
|||
|
|
fileObj, err = os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm|os.ModeTemporary)
|
|||
|
|
} else {
|
|||
|
|
// 如果文件已经存在,则不能打开
|
|||
|
|
fileObj, err = os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY|os.O_EXCL, os.ModePerm|os.ModeTemporary)
|
|||
|
|
}
|
|||
|
|
defer func() {
|
|||
|
|
if fileObj != nil {
|
|||
|
|
fileObj.Close()
|
|||
|
|
}
|
|||
|
|
}()
|
|||
|
|
if err != nil {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 写入文件数据
|
|||
|
|
_, err = io.Copy(fileObj, resp.Body)
|
|||
|
|
|
|||
|
|
return
|
|||
|
|
}
|