在Go中找不到来自url的公共文件

时间:2019-03-06 04:17:35

标签: go

我正在尝试使用ioutil.ReadFile()获取公开可用文件的内容,但是找不到该文件:panic: open http://www.pdf995.com/samples/pdf.pdf: No such file or directory

这是我的代码:

// Reading and writing files are basic tasks needed for
// many Go programs. First we'll look at some examples of
// reading files.

package main

import (
    "fmt"
    "io/ioutil"
)

// Reading files requires checking most calls for errors.
// This helper will streamline our error checks below.
func check(e error) {
    if e != nil {
        panic(e)
    }
}

func main() {
    fileInUrl, err := ioutil.ReadFile("http://www.pdf995.com/samples/pdf.pdf")
    if err != nil {
        panic(err)
    }
    fmt.Printf("HERE --- fileInUrl: %+v", fileInUrl)
}

这是一个去游乐场的例子

1 个答案:

答案 0 :(得分:1)

ioutil.ReadFile()不支持http。

如果您查看源代码(https://golang.org/src/io/ioutil/ioutil.go?s=1503:1549#L42),请使用os.Open打开文件。

我想我可以进行这种编码。

package main

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

func main() {

    fileUrl := "http://www.pdf995.com/samples/pdf.pdf"

    if err := DownloadFile("example.pdf", fileUrl); err != nil {
        panic(err)
    }
}

func DownloadFile(filepath string, url string) error {

    // Get the data
    resp, err := http.Get(url)
    if err != nil {
        return err
    }
    defer resp.Body.Close()

    // Create the file
    out, err := os.Create(filepath)
    if err != nil {
        return err
    }
    defer out.Close()

    // Write the body to file
    _, err = io.Copy(out, resp.Body)
    return err
}

但是,不要使用协议(go error dial tcp: Protocol not available)。

所以,您必须在PC上完成