10 changed files with 174 additions and 77 deletions
@ -0,0 +1,38 @@ |
|||
package mdown |
|||
|
|||
import ( |
|||
"net/http" |
|||
"net/url" |
|||
"os" |
|||
) |
|||
|
|||
var ( |
|||
TempFilesLocation = "./temp" |
|||
) |
|||
|
|||
const ( |
|||
DefaultMaxThread = 32 |
|||
DefaultMaxThreadPerURL = 8 |
|||
) |
|||
|
|||
type Client struct { |
|||
Client *http.Client |
|||
MaxThread uint64 |
|||
currentThread uint64 |
|||
} |
|||
|
|||
func NewClient(opts ...Option) *Client { |
|||
client := &Client{ |
|||
Client: &http.Client{}, |
|||
MaxThread: DefaultMaxThread, |
|||
currentThread: 0, |
|||
} |
|||
for _, opt := range opts { |
|||
opt(client) |
|||
} |
|||
return client |
|||
} |
|||
|
|||
func (d *Client) Download(url *url.URL, file *os.File, opts ...Option) { |
|||
|
|||
} |
@ -0,0 +1,16 @@ |
|||
package mdown |
|||
|
|||
import ( |
|||
"net/http" |
|||
"net/url" |
|||
) |
|||
|
|||
type Option func(*Client) |
|||
|
|||
func WithTransportProxy(proxyURL *url.URL) Option { |
|||
return func(client *Client) { |
|||
client.client.Transport = &http.Transport{ |
|||
Proxy: http.ProxyURL(proxyURL), |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,31 @@ |
|||
package mdown |
|||
|
|||
import ( |
|||
"net/url" |
|||
"os" |
|||
) |
|||
|
|||
type worker struct { |
|||
Range reqRange |
|||
Url *url.URL |
|||
File *os.File |
|||
} |
|||
|
|||
type reqRange struct { |
|||
Start uint64 |
|||
End uint64 |
|||
} |
|||
|
|||
func newWorker(r reqRange, URL, file string) (*worker, error) { |
|||
targetURL, err := url.Parse(URL) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
osFile, err := os.OpenFile(file, os.O_WRONLY|os.O_CREATE, os.ModePerm) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
return &worker{ |
|||
r, targetURL, osFile, |
|||
}, nil |
|||
} |
Loading…
Reference in new issue