ホームページ >バックエンド開発 >Golang >Go で URL から画像を効率的にダウンロードして保存するにはどうすればよいですか?

Go で URL から画像を効率的にダウンロードして保存するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-01 06:13:131032ブラウズ

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

Go で URL から画像をダウンロードして保存する

問題:

URL から画像を取得しようとしたとき、ファイルに保存すると、「関数では m (type image.Image) を type []byte として使用できません」というエラーが発生します引数。"

分析:

元のコードは、イメージを 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 から画像を取得し、応答を次の場所に保存します。 response.
  • os.Create() は次の場所に空のファイルを作成します/tmp/asdf.jpg.
  • io.Copy は、response.Body の内容全体をファイルにコピーします。
  • fmt.Println() は、成功メッセージを出力します。

追加メモ:

  • このコードHTTP 応答に有効な画像ファイルが含まれていることを前提としています。
  • 例外の処理やより高度な画像操作機能については、github.com/disintegration/imaging などの専用の Go 画像ライブラリの使用を検討してください。

以上がGo で URL から画像を効率的にダウンロードして保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。