• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

golang下载文件服务器最后一个文件

互联网 diligentman 1周前 (01-14) 6次浏览

main.go

package main

import (
	"flag"
	"github.com/PuerkitoBio/goquery"
	"io"
	"log"
	"net/http"
	"net/url"
	"os"
)

var (
	urlStr    = flag.String("url", "", "the download url")
	outputDir = flag.String("o", "", "the output dir")
)

func init() {
	flag.Parse()

	if *urlStr == "" {
		flag.PrintDefaults()
		os.Exit(0)
	}
	if l := len(*urlStr); (*urlStr)[l-1:] == "/" {
		*urlStr = (*urlStr)[:l-1]
	}

	if *outputDir == "" {
		*outputDir = "."
	}
	if l := len(*outputDir); (*outputDir)[l-1:] == "/" {
		*outputDir = (*outputDir)[:l-1]
	}

	os.MkdirAll(*outputDir, 0755)
}

func main() {
	download()
}

func download() bool {
	doc, err := goquery.NewDocument(*urlStr)
	if err != nil {
		log.Println("下载失败", err.Error())
		return false
	}

	sl := doc.Find("a")
	if sl == nil {
		log.Println("没有找到下载信息")
		return false
	}

	a := sl.Last()
	if a == nil {
		log.Println("没有找到下载信息")
		return false
	}

	href, ok := a.Attr("href")
	if !ok {
		log.Println("没有找到下载信息")
		return false
	}

	if href == "../" {
		log.Println("没有找到下载信息")
		return false
	}

	downloadUrl := *urlStr + "/" + href
	encFilename, _ := url.PathUnescape(href)
	fileName := *outputDir + "/" + encFilename

	log.Println("开始下载", downloadUrl)

	f, err := os.Create(fileName)
	if err != nil {
		log.Println("下载失败", err.Error())
		return false
	}
	defer f.Close()

	res, err := http.Get(downloadUrl)
	if err != nil {
		log.Println("下载失败", err.Error())
		return false
	}

	if _, err := io.Copy(f, res.Body); err != nil {
		log.Println("下载失败", err.Error())
		return false
	}

	log.Println("下载成功", fileName)

	return true
}

build

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o dd.s

run

./dds -url http://192.168.1.100/down/ -o download/
{{o.name}}


{{m.name}}


喜欢 (0)