Merge pull request #630 from filcloud/fix/583-redownload-param-file
continue download param file
This commit is contained in:
commit
32b80f79e7
@ -5,8 +5,10 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
@ -85,7 +87,16 @@ func (ft *fetch) maybeFetchAsync(name string, info paramFile) {
|
|||||||
defer ft.fetchLk.Unlock()
|
defer ft.fetchLk.Unlock()
|
||||||
|
|
||||||
if err := doFetch(path, info); err != nil {
|
if err := doFetch(path, info); err != nil {
|
||||||
ft.errs = append(ft.errs, xerrors.Errorf("fetching file %s: %w", path, err))
|
ft.errs = append(ft.errs, xerrors.Errorf("fetching file %s failed: %w", path, err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = ft.checkFile(path, info)
|
||||||
|
if err != nil {
|
||||||
|
ft.errs = append(ft.errs, xerrors.Errorf("checking file %s failed: %w", path, err))
|
||||||
|
err := os.Remove(path)
|
||||||
|
if err != nil {
|
||||||
|
ft.errs = append(ft.errs, xerrors.Errorf("remove file %s failed: %w", path, err))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
@ -129,18 +140,35 @@ func doFetch(out string, info paramFile) error {
|
|||||||
}
|
}
|
||||||
log.Infof("Fetching %s from %s", out, gw)
|
log.Infof("Fetching %s from %s", out, gw)
|
||||||
|
|
||||||
resp, err := http.Get(gw + info.Cid)
|
outf, err := os.OpenFile(out, os.O_RDWR|os.O_CREATE|os.O_APPEND,0666)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer resp.Body.Close()
|
|
||||||
|
|
||||||
outf, err := os.Create(out)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer outf.Close()
|
defer outf.Close()
|
||||||
|
|
||||||
|
fStat, err := outf.Stat()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
header := http.Header{}
|
||||||
|
header.Set("Range", "bytes=" + strconv.FormatInt(fStat.Size(), 10) + "-")
|
||||||
|
url, err := url.Parse(gw + info.Cid)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
req := http.Request{
|
||||||
|
Method: "GET",
|
||||||
|
URL: url,
|
||||||
|
Header: header,
|
||||||
|
Close: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := http.DefaultClient.Do(&req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
bar := pb.New64(resp.ContentLength)
|
bar := pb.New64(resp.ContentLength)
|
||||||
bar.Units = pb.U_BYTES
|
bar.Units = pb.U_BYTES
|
||||||
bar.ShowSpeed = true
|
bar.ShowSpeed = true
|
||||||
|
Loading…
Reference in New Issue
Block a user