fix URL expired issue #208

This commit is contained in:
tickstep 2022-12-26 21:24:07 +08:00
parent 97a22812a2
commit 0acd6a43d6
5 changed files with 14 additions and 16 deletions

View File

@ -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))
}
// 开始上传

View File

@ -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

View File

@ -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{

View File

@ -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,

View File

@ -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
}