go从指定的URL下载图片并保存到本地的代码实现
目录
- 1.函数定义
- 2.构建图片URL
- 3.检查图片是否存在:
- 4.下载图片
- 5.创建本地文件
- 6.保存图片到本地
- 7.完整代码
- 总结
1.函数定义
该函数接受一个 imageName 参数,图片的文件名。
2.构建图片URL
使用 fmt.Sprintf 函数构建图片的URL,这个URL指向一个特定的网络路径,用于下载图片。
url := fmt.Sprintf("https://xxxxxxx.com.cn/pic/l/sevpphp_nsmc_wxbl_fy4b_etcc_achn_lno_py_%s", imageName)
3.检查图片是否存在:
发起一个HEAD请求到构建的URL,检查图片是否存在。
如果图片不存在(HTTP 404),记录一条日志并返回,不进行下载操作。
resp, err := http.Head(url) if err != nil { log.Println(err) return // 发生错误时,跳过当前循环 } defer resp.Body.Close() if resp.StatusCode == http.StatusNotFound { log.Printf("图片 %s 不存在于服务器\n", imageName) return // 图片不存在时,跳过当前循环 }
4.下载图片
如果图片存在android,发起一个GET请求,从URL下载图片。
response, err := http.Get(url) if err != nil { log.Println(err) return }
5.创建本地文件
根据图片名称和预设的路径创建一个本地文件夹,用于保存下载的图片。
filepath := fmt.Sprintf("./uploads/image/%s", imageName) file, err := os.Create(filepath) if err != nil { log.Println(err) return }
6.保存图片到本地
下载的图片内容写入到本SrrCxnIjCH地文件中。
_, err = io.Copy(file, response.Body) if err != nil { log.Println(err) return }
7.完整代码
在整个过程中,对任何可能发生的错误进行捕获和记录。
使用 defer 语句确保在函数返回之前关闭打开的文件和网络连接,释放资源。func downloadImage(imageName string) { url := fmt.Sprintf("https://xxxxxxx.com.cn/pic/l/sevp_nsmc_wxbl_fy4b_etcc_achn_lno_py_%s", imageName) // 如果不存在,检查 HTTP 状态码 resp, err := http.Head(url) if err != nil { log.Println(err) return // 发生错误时,跳过当前循环www.devze.com } defer resp.Body.Close() if resp.StatusCode == http.StatusNotFound { log.Printf("图片 %s 不存在于服务器\n", imageName) return // 图片不存在时,跳过当前循环 } response, err := http.Get(url) if err != nil { log.Println(err) return } defer response.Body.Close() filepath := fmt.Sprintf("./uploads/image/%s", imageName) file, err := os.Create(filepath) if err != nil { log.Println(err) return } defer file.Close() _, err = io.Copy(file, response.Body) if err != nil { log.Println(err) return } }
总结
总结来说,这段代码的主要功能是尝试从指定的URL下载图片,并在下载前检查图片是否存在。如果存在,则下载并保存到本地;如果不存在,则记录错误并跳过下载。同时,它还处理了可python能出现的错误,并确保在函数结束时正确地关闭了所有资源。
以上就是go从指定的URL下载图片并保存到本地的代码实现的详细内容,更多关于go从指定URL下载图片并保存的资料请关注编程客栈(www.devze.com)其它相关文章!
精彩评论