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