首页 >后端开发 >Golang >如何在 Go 中高效地从 URL 下载并保存图像?

如何在 Go 中高效地从 URL 下载并保存图像?

Susan Sarandon
Susan Sarandon原创
2024-12-01 06:13:13965浏览

How to Efficiently Download and Save Images from URLs in Go?

在 Go 中从 URL 下载并保存图像

问题:

尝试从 URL 检索图像并保存到文件时,出现错误:“cannot use m (type image.Image) as type []byte in function

分析:

原始代码将图像转换为 Go image.Image 对象(m),它是图像在内存中的表示。但是,ioutil.WriteFile() 函数需要一个字节切片 ([]byte)。

解决方案:

而不是将图像转换为内存中的表示形式,我们可以使用 io.Copy 函数直接将响应正文复制到输出文件。下面是代码的修改版本:

package main

import (
    "fmt"
    "io"
    "log"
    "net/http"
    "os"
)

func main() {
    url := "http://i.imgur.com/m1UIjW1.jpg"
    // don't worry about errors
    response, err := http.Get(url)
    if err != nil {
        log.Fatal(err)
    }
    defer response.Body.Close()

    //open a file for writing
    file, err := os.Create("/tmp/asdf.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    // Use io.Copy to just dump the response body to the file. This supports huge files
    _, err = io.Copy(file, response.Body)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Success!")
}

说明:

  • http.Get() 从 URL 检索图像并将响应存储在响应。
  • os.Create() 在以下位置创建一个空文件/tmp/asdf.jpg。
  • io.Copy 将response.Body 的全部内容复制到文件中。
  • fmt.Println() 打印成功消息。

额外注意:

  • 此代码假设 HTTP 响应包含有效的图像文件。
  • 为了处理异常和更高级的图像操作功能,请考虑使用专用的 Go 图像库,例如如 github.com/disintegration/imaging。

以上是如何在 Go 中高效地从 URL 下载并保存图像?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn