mirror of
https://github.com/tickstep/aliyunpan.git
synced 2025-02-02 21:27:15 +08:00
fix URL expired issue #208
This commit is contained in:
parent
97a22812a2
commit
0acd6a43d6
@ -18,6 +18,7 @@ import (
|
||||
"github.com/tickstep/aliyunpan-api/aliyunpan"
|
||||
"github.com/tickstep/aliyunpan/internal/utils"
|
||||
"github.com/tickstep/library-go/converter"
|
||||
"github.com/tickstep/library-go/logger"
|
||||
"github.com/tickstep/library-go/requester"
|
||||
"github.com/tickstep/library-go/requester/rio"
|
||||
"github.com/tickstep/library-go/requester/rio/speeds"
|
||||
@ -136,13 +137,13 @@ func (muer *MultiUploader) Execute() error {
|
||||
// 分配任务
|
||||
if muer.instanceState != nil {
|
||||
muer.workers = muer.getWorkerListByInstanceState(muer.instanceState)
|
||||
uploaderVerbose.Infof("upload task CREATED from instance state\n")
|
||||
logger.Verboseln("upload task CREATED from instance state\n")
|
||||
} else {
|
||||
muer.workers = muer.getWorkerListByInstanceState(&InstanceState{
|
||||
BlockList: SplitBlock(muer.file.Len(), muer.config.BlockSize),
|
||||
})
|
||||
|
||||
uploaderVerbose.Infof("upload task CREATED: block size: %d, num: %d\n", muer.config.BlockSize, len(muer.workers))
|
||||
logger.Verboseln("upload task CREATED: block size: %d, num: %d\n", muer.config.BlockSize, len(muer.workers))
|
||||
}
|
||||
|
||||
// 开始上传
|
||||
|
@ -17,6 +17,7 @@ import (
|
||||
"context"
|
||||
"github.com/oleiade/lane"
|
||||
"github.com/tickstep/aliyunpan/internal/waitgroup"
|
||||
"github.com/tickstep/library-go/logger"
|
||||
"github.com/tickstep/library-go/requester"
|
||||
"os"
|
||||
"strconv"
|
||||
@ -88,7 +89,7 @@ func (muer *MultiUploader) upload() (uperr error) {
|
||||
)
|
||||
go func() {
|
||||
if !wer.uploadDone {
|
||||
uploaderVerbose.Info("begin to upload part: " + strconv.Itoa(wer.id))
|
||||
logger.Verboseln("begin to upload part: " + strconv.Itoa(wer.id))
|
||||
uploadDone, terr = muer.multiUpload.UploadFile(ctx, int(wer.id), wer.partOffset, wer.splitUnit.Range().End, wer.splitUnit, uploadClient)
|
||||
} else {
|
||||
uploadDone = true
|
||||
@ -101,10 +102,11 @@ func (muer *MultiUploader) upload() (uperr error) {
|
||||
return
|
||||
case <-doneChan:
|
||||
// continue
|
||||
uploaderVerbose.Info("multiUpload worker upload file done")
|
||||
logger.Verboseln("multiUpload worker upload file done")
|
||||
}
|
||||
cancel()
|
||||
if terr != nil {
|
||||
logger.Verboseln("upload file part err: %+v", terr)
|
||||
if me, ok := terr.(*MultiError); ok {
|
||||
if me.Terminated { // 终止
|
||||
muer.closeCanceledOnce.Do(func() { // 只关闭一次
|
||||
@ -113,7 +115,7 @@ func (muer *MultiUploader) upload() (uperr error) {
|
||||
uperr = me.Err
|
||||
return
|
||||
} else if me.NeedStartOver {
|
||||
uploaderVerbose.Warnf("upload start over: %d\n", wer.id)
|
||||
logger.Verboseln("upload start over: %d\n", wer.id)
|
||||
// 从头开始上传
|
||||
muer.closeCanceledOnce.Do(func() { // 只关闭一次
|
||||
close(muer.canceled)
|
||||
@ -123,9 +125,9 @@ func (muer *MultiUploader) upload() (uperr error) {
|
||||
}
|
||||
}
|
||||
|
||||
uploaderVerbose.Warnf("upload err: %s, id: %d\n", terr, wer.id)
|
||||
logger.Verboseln("upload err: %s, id: %d\n", terr, wer.id)
|
||||
wer.splitUnit.Seek(0, os.SEEK_SET)
|
||||
uploadDeque.Append(wer)
|
||||
uploadDeque.Prepend(wer) // 放回上传队列首位
|
||||
return
|
||||
}
|
||||
wer.uploadDone = uploadDone
|
||||
@ -169,11 +171,11 @@ func (muer *MultiUploader) upload() (uperr error) {
|
||||
if allSuccess {
|
||||
e := muer.multiUpload.CommitFile()
|
||||
if e != nil {
|
||||
uploaderVerbose.Warn("upload file commit failed: " + e.Error())
|
||||
logger.Verboseln("upload file commit failed: " + e.Error())
|
||||
return e
|
||||
}
|
||||
} else {
|
||||
uploaderVerbose.Warn("upload file not all success: " + muer.UploadOpEntity.FileId)
|
||||
logger.Verboseln("upload file not all success: " + muer.UploadOpEntity.FileId)
|
||||
}
|
||||
|
||||
return
|
||||
|
@ -14,10 +14,8 @@
|
||||
package uploader
|
||||
|
||||
import (
|
||||
"github.com/tickstep/aliyunpan/internal/config"
|
||||
"github.com/tickstep/aliyunpan/internal/utils"
|
||||
"github.com/tickstep/library-go/converter"
|
||||
"github.com/tickstep/library-go/logger"
|
||||
"github.com/tickstep/library-go/requester"
|
||||
"github.com/tickstep/library-go/requester/rio"
|
||||
"net/http"
|
||||
@ -51,10 +49,6 @@ type (
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
uploaderVerbose = logger.New("UPLOADER", config.EnvVerbose)
|
||||
)
|
||||
|
||||
// NewUploader 返回 uploader 对象, url: 上传地址, readerlen64: 实现 rio.ReaderLen64 接口的对象, 例如文件
|
||||
func NewUploader(url string, readerlen64 rio.ReaderLen64) (uploader *Uploader) {
|
||||
uploader = &Uploader{
|
||||
|
@ -96,6 +96,7 @@ func (pu *PanUpload) UploadFile(ctx context.Context, partseq int, partOffset int
|
||||
}
|
||||
newUploadInfo, err := pu.panClient.GetUploadUrl(refreshUploadParam)
|
||||
if err != nil {
|
||||
logger.Verboseln(err)
|
||||
return false, &uploader.MultiError{
|
||||
Err: uploader.UploadUrlExpired,
|
||||
Terminated: false,
|
||||
|
@ -55,7 +55,7 @@ func IsUrlExpired(urlStr string) bool {
|
||||
}
|
||||
expiredTimeSecStr := u.Query().Get("x-oss-expires")
|
||||
expiredTimeSec, _ := strconv.ParseInt(expiredTimeSecStr, 10, 64)
|
||||
if (time.Now().Unix() - 10) >= expiredTimeSec {
|
||||
if (expiredTimeSec - time.Now().Unix()) <= 10 { // 小于10秒
|
||||
// expired
|
||||
return true
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user