downloader

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 11, 2020 License: MIT Imports: 15 Imported by: 0

README

downloader


✨ 简介

一个基于go语言的http下载器

🎉 功能

  • 文件夹自动创建
  • 命令行进度条
  • 文件名过滤特殊字符
  • 断点续传
  • 单线程下载
  • 实时获取下载状态

🐱‍🏍 计划

  • 多线程下载
  • 限速下载

🎊 安装

go get -u gitee.com/rock_rabbit/downloader

📖 文档

https://godoc.org/gitee.com/rock_rabbit/downloader

🎠 使用

package main
import "gitee.com/rock_rabbit/downloader"
func main(){
    url := "https://desk-fd.zol-img.com.cn/t_s960x600c5/g3/M05/0B/0E/ChMlWF7xvaWIcxEzAB9uRBF9dyoAAVJlgLjyx8AH25c171.jpg"
    err := downloader.New(url,"./").Start()
    if err != nil{
        panic(err)
    }
}
package main
import (
	"fmt"
	"gitee.com/rock_rabbit/downloader"
)
func main() {
	url := "https://dev46.baidupan.com/121116bb/2020/12/10/a7ae9c58120be493375988f8e02475d4.7z?st=sE7sMJalY78rlP59XLuPrQ&e=1607675694&b=U1FdMgB0UXlZXF5kVWQDflZmCCYNOgEzVloBPVB5X2pTL15sVWQEMgVpUjEHCAdTVnYINlQ5AW4IOApYV2JUZlMzXW0AMVFmWTxeMVUrAzBWeQ_c_c&fi=34054584&pid=39-70-47-126&up="
    outPath := `C:\Users\Administrator\Desktop\新建文件夹`
    // 以下执行流程解析
    // 设置不显示进度条,设置下载进度回调,添加下载结束defer,设置文件名称,开始
	if err := downloader.New(url, outPath).SetIsBar(false).SetOnProgress(func(size, speed, downloadedSize int64) {
		fmt.Printf("\r总大小:%d byte  已下载:%d byte  下载速度:%d byte/s", size, downloadedSize, speed)
	}).AddDfer(func(dl *downloader.Downloader) {
		fmt.Printf("  下载结束\n")
	}).SetOutputName(fmt.Sprintf("Pot-Player64.7z")).Start(); err != nil {
		panic(err)
	}
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BarThreadOne

func BarThreadOne(dl *Downloader, startSize, size int64, r io.Reader) io.Reader

BarThreadOne 单线程下载进度条

func Defer

func Defer(dl *Downloader)

Defer 下载关闭事件

func GetFileCreateTime

func GetFileCreateTime(sys interface{}) int64

GetFileCreateTime 获取文件创建时间

func GetFilename

func GetFilename(url, contentDisposition, contentType string) string

GetFilename 生成文件名称

func GetFiltrationFilename

func GetFiltrationFilename(name string) string

GetFiltrationFilename 返回过滤后的文件名

Types

type BarThreadOneReader

type BarThreadOneReader struct {
	io.Reader
	// contains filtered or unexported fields
}

BarThreadOneReader 单线程下载进度条,读取IO

func (*BarThreadOneReader) Read

func (r *BarThreadOneReader) Read(p []byte) (n int, err error)

type DownloadInfo

type DownloadInfo struct {
	Size           int64  // 文件总大小
	Speed          int64  // 每秒下载大小,用来计算下载速度/s
	DownloadedSize *int64 // 已下载文件大小,原子操作
}

DownloadInfo 下载时的信息

func (*DownloadInfo) AddDownloadedSize

func (info *DownloadInfo) AddDownloadedSize(v int64)

AddDownloadedSize 增加已下载文件大小

func (*DownloadInfo) GetDownloadedSize

func (info *DownloadInfo) GetDownloadedSize() int64

GetDownloadedSize 获取已下载文件大小

type Downloader

type Downloader struct {
	URL         string        // 下载URL
	Options     *Options      // 下载参数
	ProgressBar ProgressBar   // 进度条参数
	Defer       []OnDefer     // 下载关闭事件
	Info        *DownloadInfo // 下载时的信息
	OnProgress  OnProgress    // 下载进度回调
}

Downloader 下载信息

func New

func New(url string, outputPath string) *Downloader

New 创建一个简单的下载器

func NewDownloader

func NewDownloader(url string) *Downloader

NewDownloader 创建下载器

func (*Downloader) AddDfer

func (dl *Downloader) AddDfer(d OnDefer) *Downloader

AddDfer 添加Defer 下载关闭事件

func (*Downloader) AddHeader

func (dl *Downloader) AddHeader(name, value string) *Downloader

AddHeader 添加请求时的Header

func (*Downloader) DownloadOver

func (dl *Downloader) DownloadOver() error

DownloadOver 下载完成,强制覆盖,修改文件名称

func (*Downloader) GetBarTemplate

func (dl *Downloader) GetBarTemplate() pb.ProgressBarTemplate

GetBarTemplate 获取进度条模板

func (*Downloader) GetIsBar

func (dl *Downloader) GetIsBar() bool

GetIsBar 获取是否打印进度条

func (*Downloader) GetPath

func (dl *Downloader) GetPath() string

GetPath 获取文件完整路径

func (*Downloader) GetTempName

func (dl *Downloader) GetTempName() string

GetTempName 获取临时文件名

func (*Downloader) GetTempPath

func (dl *Downloader) GetTempPath() string

GetTempPath 获取临时文件完整路径

func (*Downloader) GetThreadNum

func (dl *Downloader) GetThreadNum() int

GetThreadNum 获取下载线程数

func (*Downloader) IsExist

func (dl *Downloader) IsExist(size int64, lastModified string) error

IsExist 目录与文件是否存在处理 自动创建目录 检查文件是否完整,若出现异常直接返回不完整

func (*Downloader) IsRanges

func (dl *Downloader) IsRanges() bool

IsRanges 判断是否支持断点续传

func (*Downloader) ProxyReader

func (dl *Downloader) ProxyReader(r io.Reader) io.Reader

ProxyReader 代理io读

func (*Downloader) Response

func (dl *Downloader) Response(onRequest OnRequest) (*http.Response, error)

Response 创建Response

func (*Downloader) SetBarTemplate

func (dl *Downloader) SetBarTemplate(BarTemplate pb.ProgressBarTemplate) *Downloader

SetBarTemplate 设置进度条模板

func (*Downloader) SetBody

func (dl *Downloader) SetBody(body io.Reader) *Downloader

SetBody 设置请求Body

func (*Downloader) SetClient

func (dl *Downloader) SetClient(Client *http.Client) *Downloader

SetClient 设置请求Client

func (*Downloader) SetHeader

func (dl *Downloader) SetHeader(name, value string) *Downloader

SetHeader 设置请求时的Header

func (*Downloader) SetIsBar

func (dl *Downloader) SetIsBar(i bool) *Downloader

SetIsBar 设置是否打印进度条

func (*Downloader) SetMethod

func (dl *Downloader) SetMethod(method string) *Downloader

SetMethod 设置请求Method

func (*Downloader) SetOnProgress

func (dl *Downloader) SetOnProgress(f OnProgress) *Downloader

SetOnProgress 设置进度事件

func (*Downloader) SetOutputName

func (dl *Downloader) SetOutputName(outputName string) *Downloader

SetOutputName 设置输出文件名称

func (*Downloader) SetOutputPath

func (dl *Downloader) SetOutputPath(outputPath string) *Downloader

SetOutputPath 设置输出目录

func (*Downloader) SetThreadNum

func (dl *Downloader) SetThreadNum(n int) *Downloader

SetThreadNum 设置下载线程数

func (*Downloader) Start

func (dl *Downloader) Start() error

Start 启动下载

func (*Downloader) StatSpeed

func (dl *Downloader) StatSpeed()

StatSpeed 统计下载速度

func (*Downloader) Thread

func (dl *Downloader) Thread() error

Thread 多线程下载器

func (*Downloader) ThreadOne

func (dl *Downloader) ThreadOne() error

ThreadOne 单线程下载器 支持断点续传

type IoProxyReader

type IoProxyReader struct {
	io.Reader
	// contains filtered or unexported fields
}

IoProxyReader 代理io读

func (*IoProxyReader) Close

func (r *IoProxyReader) Close() (err error)

Close the wrapped reader when it implements io.Closer

func (*IoProxyReader) Read

func (r *IoProxyReader) Read(p []byte) (n int, err error)

Read 读

type OnDefer

type OnDefer func(dl *Downloader)

OnDefer 完成事件

type OnProgress

type OnProgress func(size, speed, downloadedSize int64)

OnProgress 载进度回调 size 文件总大小,读取不出文件大小为0 speed 每秒下载大小,用来计算下载速度/s downloadedSize 已下载文件大小

type OnRequest

type OnRequest func(*http.Request)

OnRequest 设置

type Options

type Options struct {
	OutputPath string // 保存路径
	OutputName string // 保存文件名 为空:自动生成

	Replace bool   // 是否允许覆盖文件
	Rquest  Rquest // 请求参数

	ThreadNum int // 下载线程数
}

Options 下载参数

func NewOptions

func NewOptions() *Options

NewOptions 创建下载参数

type ProgressBar

type ProgressBar struct {
	IsBar       bool                   // 是否显示进度条
	BarTemplate pb.ProgressBarTemplate // 进度条样式
}

ProgressBar 进度条参数

type Rquest

type Rquest struct {
	Client *http.Client
	Method string      // 请求方式 默认 GET
	Body   io.Reader   // 请求Body
	Header http.Header // 头文件
}

Rquest 请求参数

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL