如何使用 golang 下载包含所有文件和子目录的 HTTP 目录,因为它们出现在在线 files/folders 列表中?
How to download HTTP directory with all files and sub-directories as they appear on the online files/folders list using golang?
目前我正在使用以下功能下载文件,我也想从 URL
下载文件夹
如有任何帮助,我们将不胜感激
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
fileUrl := "http://example.com/file.txt"
err := DownloadFile("./example.txt", fileUrl)
if err != nil {
panic(err)
}
fmt.Println("Downloaded: " + fileUrl)
}
// DownloadFile will download a url to a local file.
func DownloadFile(filepath string, url string) error {
// Get the data
resp, err := http.Get(url)
contentType = resp.Header.Get("Content-Type")
if err != nil {
return err
}
defer resp.Body.Close()
if contentType == "application/octet-stream" {
// 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
}
}else{
fmt.Println("Requested URL is not downloadable")
}
我在下面提到了 link:
但我想在 golang 中使用它
在这里您可以找到 wget --recursive
实现的算法:https://www.gnu.org/software/wget/manual/html_node/Recursive-Download.html
基本上,您访问该页面,然后解析 HTML 并跟随每个 href link(如果需要,还有 css link),可以将其提取为这个:https://vorozhko.net/get-all-links-from-html-page-with-go-lang.
一旦你拥有了所有的 links 就对它们做一个请求,如果它不是 text/html
或者根据 Content-Type header 保存它或者为 [=22= 解析它]s 如果是的话。
目前我正在使用以下功能下载文件,我也想从 URL
下载文件夹如有任何帮助,我们将不胜感激
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
fileUrl := "http://example.com/file.txt"
err := DownloadFile("./example.txt", fileUrl)
if err != nil {
panic(err)
}
fmt.Println("Downloaded: " + fileUrl)
}
// DownloadFile will download a url to a local file.
func DownloadFile(filepath string, url string) error {
// Get the data
resp, err := http.Get(url)
contentType = resp.Header.Get("Content-Type")
if err != nil {
return err
}
defer resp.Body.Close()
if contentType == "application/octet-stream" {
// 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
}
}else{
fmt.Println("Requested URL is not downloadable")
}
我在下面提到了 link:
但我想在 golang 中使用它
在这里您可以找到 wget --recursive
实现的算法:https://www.gnu.org/software/wget/manual/html_node/Recursive-Download.html
基本上,您访问该页面,然后解析 HTML 并跟随每个 href link(如果需要,还有 css link),可以将其提取为这个:https://vorozhko.net/get-all-links-from-html-page-with-go-lang.
一旦你拥有了所有的 links 就对它们做一个请求,如果它不是 text/html
或者根据 Content-Type header 保存它或者为 [=22= 解析它]s 如果是的话。