downloader

package module
v1.1.1 Latest Latest
Warning

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

Go to latest
Published: Dec 19, 2020 License: MIT Imports: 16 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,"./").Run()
    if err != nil{
        panic(err)
    }
}
package downloader_test

import (
	"context"
	"fmt"
	"testing"

	"gitee.com/rock_rabbit/downloader"
)

func TestDownload(t *testing.T) {
	var err error
	// 测试下载
	url := "http://speed.hetzner.de/100MB.bin"
	outPath := `D:\测试下载`
	dl := downloader.New(url, outPath)
	// 设置不显示进度条
	dl.SetIsBar(false)
	// 设置进度回调
	dl.SetOnProgress(func(size, speed, downloadedSize int64, context context.Context) {
		fmt.Printf("\r总大小:%d byte  已下载:%d byte  下载速度:%d byte/s", size, downloadedSize, speed)
	})
	// 添加 Start() 结束后的回调
	dl.AddDfer(func(dl *downloader.Downloader) {
		fmt.Printf("  下载结束\n")
	})
	// 设置文件名,不设置自动获取文件名
	dl.SetOutputName("100MB.bin")
	// 启动下载器 并阻塞等待
	err = dl.Run()
	if err != nil {
		t.Log(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, info *DownladerInfo, err *error)

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 DownladerInfo added in v1.1.0

type DownladerInfo struct {
	Size           int64              // 文件总大小
	Speed          int64              // 每秒下载大小,用来计算下载速度/s
	DownloadedSize *int64             // 已下载文件大小,原子操作
	Error          error              // 错误信息
	Context        context.Context    // 上下文
	Close          context.CancelFunc // 关闭上下文
	OnProgress     OnProgress         // 下载进度回调,直接从Downlader中Copy过来
}

DownladerInfo 下载过程中产生的信息

func NewInfo added in v1.1.0

func NewInfo() *DownladerInfo

NewInfo 新建一个下载信息

func (*DownladerInfo) AddDownloadedSize added in v1.1.0

func (info *DownladerInfo) AddDownloadedSize(v int64)

AddDownloadedSize 增加已下载文件大小

func (*DownladerInfo) GetDownloadedSize added in v1.1.0

func (info *DownladerInfo) GetDownloadedSize() int64

GetDownloadedSize 获取已下载文件大小

func (*DownladerInfo) ProxyReader added in v1.1.0

func (info *DownladerInfo) ProxyReader(r io.Reader) io.Reader

ProxyReader 代理io读

func (*DownladerInfo) StatSpeed added in v1.1.0

func (info *DownladerInfo) StatSpeed()

StatSpeed 每秒统计下载速度

func (*DownladerInfo) Wait added in v1.1.0

func (info *DownladerInfo) Wait() error

Wait 阻塞等待

type Downloader

type Downloader struct {
	URL         string     // 下载URL
	Options     *Options   // 下载参数
	ProgressBar            // 进度条参数
	Defer       []OnDefer  // 下载关闭事件
	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) Response

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

Response 创建Response

func (*Downloader) Run added in v1.1.0

func (dl *Downloader) Run() error

Run 运行并阻塞等待

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() *DownladerInfo

Start 启动下载,但不阻塞

func (*Downloader) Thread

func (dl *Downloader) Thread(info *DownladerInfo) error

Thread 多线程下载器

func (*Downloader) ThreadOne

func (dl *Downloader) ThreadOne(info *DownladerInfo) (err 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, context context.Context)

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

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