>백엔드 개발 >Golang >Go에서 URL의 이미지를 효율적으로 다운로드하고 저장하는 방법은 무엇입니까?

Go에서 URL의 이미지를 효율적으로 다운로드하고 저장하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-01 06:13:13953검색

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

Go의 URL에서 이미지 다운로드 및 저장

문제:

URL에서 이미지를 검색하려고 할 때 파일에 저장하면 오류가 발생합니다. "함수에서 m(image.Image 유형)을 []byte 유형으로 사용할 수 없습니다. 인수."

분석:

원래 코드는 이미지를 이미지의 메모리 내 표현인 Go image.Image 객체(m)로 변환합니다. 그러나 ioutil.WriteFile() 함수는 바이트 슬라이스([]바이트)를 예상합니다.

해결책:

이미지를 메모리 내 표현으로 변환하는 대신 , 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.