ホームページ >バックエンド開発 >Golang >Go で URL から画像を保存するときに発生する「m (type image.Image) を Type []byte として使用できません」エラーを解決する方法

Go で URL から画像を保存するときに発生する「m (type image.Image) を Type []byte として使用できません」エラーを解決する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-11-30 08:00:171004ブラウズ

How to Solve the

URL から画像をファイルに保存する方法: m (type image.Image) を Type []byte として使用できないエラーを解決する

URL から画像を取得してファイルに保存することは、多くのプログラミング アプリケーションで一般的なタスクです。 Go では、http および image パッケージを使用してこれを実現できます。ただし、image.Image タイプを ioutil.WriteFile 関数に渡そうとすると、エラーが発生する可能性があります。

エラー メッセージ「関数では m (type image.Image) を type []byte として使用できません」引数」は、image.Image タイプをファイルに直接書き込むことができないことを示します。これは、ioutil.WriteFile 関数が 2 番目の引数としてバイト スライス ([]byte) を予期しているためです。

この状況で画像をファイルに保存する正しい方法は、画像を完全にデコードしないことです。代わりに、画像データを含む応答本文をファイルに直接コピーできます。

package main

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

func main() {
    url := "http://i.imgur.com/m1UIjW1.jpg"
    // don't worry about errors
    response, e := http.Get(url)
    if e != nil {
        log.Fatal(e)
    }
    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!")
}

この変更されたコードでは、

  1. 画像はデコードされません。 using image.Decode.
  2. os.Create を使用して書き込み用のファイルを開きます。
  3. io.Copy を使用して、生の画像データを含む応答本文をファイルに直接コピーします。これにより、デコードせずに画像をファイルに保存できます。

以上がGo で URL から画像を保存するときに発生する「m (type image.Image) を Type []byte として使用できません」エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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