-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add chaoxing and vtencent #5526
Conversation
msterzhang
commented
Nov 16, 2023
- 新增挂载超星小组网盘
- 新增挂载腾讯智能创作平台文件挂载
Thanks for opening this pull request! Please check out our contributing guidelines. |
"content-type": "application/json", | ||
"origin": d.conf.origin, | ||
"referer": d.conf.referer, | ||
}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
}) | |
}).ForceContentType("application/json") |
响应头ContentType有问题,所以后面json不解析。可以加上这个解决
drivers/vtencent/util.go
Outdated
} | ||
var resps RspFiles | ||
rsp, err := d.request(api, http.MethodPost, func(req *resty.Request) { | ||
req.SetBody(dat) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
req.SetBody(dat) | |
req.SetBody(form) |
设置"content-type": "application/json"头后,可以直接发json字符串。
drivers/vtencent/util.go
Outdated
} | ||
secretKey := "M6BrOqmpW9rl+jZuFoAOwNawGdWCaKllffpDb53za4I=" | ||
SummaryKey := QTwoSignatureKey(uuid.New().String(), secretKey) | ||
rspCreatrMaterial, err := d.CreateUploadMaterial(classId, stream.GetName(), SummaryKey) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
抓包看第三个参数好像是文件sha1,用于判断秒传?
drivers/vtencent/util.go
Outdated
uploadId, err := d.GetUploadId(rspUGC) | ||
if err != nil { | ||
return err | ||
} | ||
Etag, err := d.PutFile(uploadId, rspUGC, stream) | ||
if err != nil { | ||
return err | ||
} | ||
err = d.CompleteMultipartUpload(uploadId, Etag, rspUGC, stream) | ||
if err != nil { | ||
return err | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
腾讯cos可以用s3上传,代码大致是这样.少写代码😏
params := rspUGC.Data
certificate := params.TempCertificate
cfg := &aws.Config{
HTTPClient: base.HttpClient,
// S3ForcePathStyle: aws.Bool(true),
Credentials: credentials.NewStaticCredentials(certificate.SecretID, certificate.SecretKey, certificate.Token),
Region: aws.String(params.StorageRegionV5),
Endpoint: aws.String(fmt.Sprintf("cos.%s.myqcloud.com", params.StorageRegionV5)),
}
ss, err := session.NewSession(cfg)
if err != nil {
return nil, err
}
uploader := s3manager.NewUploader(ss)
input := &s3manager.UploadInput{
Bucket: aws.String(fmt.Sprintf("%s-%d", params.StorageBucket, params.StorageAppID)),
Key: ¶ms.Video.StoragePath,
Body: stream,
}
out, err := uploader.UploadWithContext(ctx, input)
if err != nil {
return nil, err
}
Etag := strings.Trim(*out.ETag, "\"")
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
改了试了下,报InvalidArgument错误
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
没问题啊,你是不是把Etag传CompleteMultipartUpload里面去了.
我贴的代码把368-379替换了改一改就可用直接跑成功的啊
FinishUploadMaterial 的 SummaryKey 是文件sha1 在上面rspCreatrMaterial.Data.QuickUpload为true时使用的,用于秒传跳过ApplyUploadUGC到CommitUploadUGC这些方法
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
已测试跑完没问题,不需要CompleteMultipartUpload,但是有个问题UploadSummaryKey并不是sha1,这个东西会变变,你可以同一个文件多传几次看看 ,暂时不知道生成规则
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok 已经测试成功!秒传没问题了
drivers/vtencent/util.go
Outdated
var resps RspFiles | ||
rsp, err := d.request(api, http.MethodPost, func(req *resty.Request) { | ||
req.SetBody(form).ForceContentType("application/json") | ||
}, &resps) | ||
if err != nil { | ||
} | ||
if err := json.Unmarshal(rsp, &resps); err != nil { | ||
return []File{}, err | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
> 响应头ContentType有问题,所以后面json不解析。可以加上这个解决
这里你理解错了,我的意识是可用把代码改成这样,不需要额外json.Unmarshal. 只需要传入request就行
var resps RspFiles | |
rsp, err := d.request(api, http.MethodPost, func(req *resty.Request) { | |
req.SetBody(form).ForceContentType("application/json") | |
}, &resps) | |
if err != nil { | |
} | |
if err := json.Unmarshal(rsp, &resps); err != nil { | |
return []File{}, err | |
} | |
var resps RspFiles | |
rsp, err := d.request(api, http.MethodPost, func(req *resty.Request) { | |
req.SetBody(form) | |
}, &resps) | |
if err != nil { | |
return []File{}, err | |
} |
drivers/vtencent/util.go
Outdated
func (d *Vtencent) FileUpload(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error { | ||
classId, err := strconv.Atoi(dstDir.GetID()) | ||
if err != nil { | ||
return err | ||
} | ||
tmpF, err := stream.CacheFullInTempFile() | ||
if err != nil { | ||
return err | ||
} | ||
SummaryKey, err := utils.HashFile(utils.SHA1, tmpF) | ||
if err != nil { | ||
return err | ||
} | ||
chunkHash := SummaryKey | ||
var chunkLength int64 = 1024 * 1024 * 10 | ||
if stream.GetSize() > chunkLength { | ||
buf := bytes.NewBuffer(make([]byte, 0, chunkLength)) | ||
io.CopyN(buf, tmpF, chunkLength) | ||
chunkHash = utils.HashData(utils.SHA1, buf.Bytes()) | ||
} | ||
rspCreatrMaterial, err := d.CreateUploadMaterial(classId, stream.GetName(), chunkHash) | ||
if err != nil { | ||
return err | ||
} | ||
if rspCreatrMaterial.Data.QuickUpload { | ||
UploadContext := rspCreatrMaterial.Data.UploadContext | ||
_, err = d.FinishHashUploadMaterial(SummaryKey, UploadContext) | ||
if err != nil { | ||
return err | ||
} | ||
return nil | ||
} | ||
rspUGC, err := d.ApplyUploadUGC(rspCreatrMaterial.Data.VodUploadSign, stream) | ||
if err != nil { | ||
return err | ||
} | ||
params := rspUGC.Data | ||
certificate := params.TempCertificate | ||
cfg := &aws.Config{ | ||
HTTPClient: base.HttpClient, | ||
// S3ForcePathStyle: aws.Bool(true), | ||
Credentials: credentials.NewStaticCredentials(certificate.SecretID, certificate.SecretKey, certificate.Token), | ||
Region: aws.String(params.StorageRegionV5), | ||
Endpoint: aws.String(fmt.Sprintf("cos.%s.myqcloud.com", params.StorageRegionV5)), | ||
} | ||
ss, err := session.NewSession(cfg) | ||
if err != nil { | ||
return err | ||
} | ||
uploader := s3manager.NewUploader(ss) | ||
input := &s3manager.UploadInput{ | ||
Bucket: aws.String(fmt.Sprintf("%s-%d", params.StorageBucket, params.StorageAppID)), | ||
Key: ¶ms.Video.StoragePath, | ||
Body: stream, | ||
} | ||
_, err = uploader.UploadWithContext(ctx, input) | ||
if err != nil { | ||
return err | ||
} | ||
rspCommitUGC, err := d.CommitUploadUGC(rspCreatrMaterial.Data.VodUploadSign, rspUGC.Data.VodSessionKey) | ||
if err != nil { | ||
return err | ||
} | ||
VodVerifyKey := rspCommitUGC.Data.Video.VerifyContent | ||
VodFileId := rspCommitUGC.Data.FileID | ||
UploadContext := rspCreatrMaterial.Data.UploadContext | ||
_, err = d.FinishUploadMaterial(SummaryKey, VodVerifyKey, UploadContext, VodFileId) | ||
if err != nil { | ||
return err | ||
} | ||
return nil | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
func (d *Vtencent) FileUpload(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error { | |
classId, err := strconv.Atoi(dstDir.GetID()) | |
if err != nil { | |
return err | |
} | |
tmpF, err := stream.CacheFullInTempFile() | |
if err != nil { | |
return err | |
} | |
SummaryKey, err := utils.HashFile(utils.SHA1, tmpF) | |
if err != nil { | |
return err | |
} | |
chunkHash := SummaryKey | |
var chunkLength int64 = 1024 * 1024 * 10 | |
if stream.GetSize() > chunkLength { | |
buf := bytes.NewBuffer(make([]byte, 0, chunkLength)) | |
io.CopyN(buf, tmpF, chunkLength) | |
chunkHash = utils.HashData(utils.SHA1, buf.Bytes()) | |
} | |
rspCreatrMaterial, err := d.CreateUploadMaterial(classId, stream.GetName(), chunkHash) | |
if err != nil { | |
return err | |
} | |
if rspCreatrMaterial.Data.QuickUpload { | |
UploadContext := rspCreatrMaterial.Data.UploadContext | |
_, err = d.FinishHashUploadMaterial(SummaryKey, UploadContext) | |
if err != nil { | |
return err | |
} | |
return nil | |
} | |
rspUGC, err := d.ApplyUploadUGC(rspCreatrMaterial.Data.VodUploadSign, stream) | |
if err != nil { | |
return err | |
} | |
params := rspUGC.Data | |
certificate := params.TempCertificate | |
cfg := &aws.Config{ | |
HTTPClient: base.HttpClient, | |
// S3ForcePathStyle: aws.Bool(true), | |
Credentials: credentials.NewStaticCredentials(certificate.SecretID, certificate.SecretKey, certificate.Token), | |
Region: aws.String(params.StorageRegionV5), | |
Endpoint: aws.String(fmt.Sprintf("cos.%s.myqcloud.com", params.StorageRegionV5)), | |
} | |
ss, err := session.NewSession(cfg) | |
if err != nil { | |
return err | |
} | |
uploader := s3manager.NewUploader(ss) | |
input := &s3manager.UploadInput{ | |
Bucket: aws.String(fmt.Sprintf("%s-%d", params.StorageBucket, params.StorageAppID)), | |
Key: ¶ms.Video.StoragePath, | |
Body: stream, | |
} | |
_, err = uploader.UploadWithContext(ctx, input) | |
if err != nil { | |
return err | |
} | |
rspCommitUGC, err := d.CommitUploadUGC(rspCreatrMaterial.Data.VodUploadSign, rspUGC.Data.VodSessionKey) | |
if err != nil { | |
return err | |
} | |
VodVerifyKey := rspCommitUGC.Data.Video.VerifyContent | |
VodFileId := rspCommitUGC.Data.FileID | |
UploadContext := rspCreatrMaterial.Data.UploadContext | |
_, err = d.FinishUploadMaterial(SummaryKey, VodVerifyKey, UploadContext, VodFileId) | |
if err != nil { | |
return err | |
} | |
return nil | |
} | |
func (d *Vtencent) FileUpload(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error { | |
classId, err := strconv.Atoi(dstDir.GetID()) | |
if err != nil { | |
return err | |
} | |
const chunkLength int64 = 1024 * 1024 * 10 | |
reader, err := stream.RangeRead(http_range.Range{Start: 0, Length: chunkLength}) | |
if err != nil { | |
return err | |
} | |
chunkHash, err := utils.HashReader(utils.SHA1, reader) | |
if err != nil { | |
return err | |
} | |
rspCreatrMaterial, err := d.CreateUploadMaterial(classId, stream.GetName(), chunkHash) | |
if err != nil { | |
return err | |
} | |
if rspCreatrMaterial.Data.QuickUpload { | |
SummaryKey := stream.GetHash().GetHash(utils.SHA1) | |
if len(SummaryKey) < utils.SHA1.Width { | |
if SummaryKey, err = utils.HashReader(utils.SHA1, stream); err != nil { | |
return err | |
} | |
} | |
UploadContext := rspCreatrMaterial.Data.UploadContext | |
_, err = d.FinishHashUploadMaterial(SummaryKey, UploadContext) | |
if err != nil { | |
return err | |
} | |
return nil | |
} | |
hash := sha1.New() | |
rspUGC, err := d.ApplyUploadUGC(rspCreatrMaterial.Data.VodUploadSign, stream) | |
if err != nil { | |
return err | |
} | |
params := rspUGC.Data | |
certificate := params.TempCertificate | |
cfg := &aws.Config{ | |
HTTPClient: base.HttpClient, | |
// S3ForcePathStyle: aws.Bool(true), | |
Credentials: credentials.NewStaticCredentials(certificate.SecretID, certificate.SecretKey, certificate.Token), | |
Region: aws.String(params.StorageRegionV5), | |
Endpoint: aws.String(fmt.Sprintf("cos.%s.myqcloud.com", params.StorageRegionV5)), | |
} | |
ss, err := session.NewSession(cfg) | |
if err != nil { | |
return err | |
} | |
uploader := s3manager.NewUploader(ss) | |
input := &s3manager.UploadInput{ | |
Bucket: aws.String(fmt.Sprintf("%s-%d", params.StorageBucket, params.StorageAppID)), | |
Key: ¶ms.Video.StoragePath, | |
Body: io.TeeReader(stream, io.MultiWriter(hash, driver.NewProgress(stream.GetSize(), up))), | |
} | |
_, err = uploader.UploadWithContext(ctx, input) | |
if err != nil { | |
return err | |
} | |
rspCommitUGC, err := d.CommitUploadUGC(rspCreatrMaterial.Data.VodUploadSign, rspUGC.Data.VodSessionKey) | |
if err != nil { | |
return err | |
} | |
VodVerifyKey := rspCommitUGC.Data.Video.VerifyContent | |
VodFileId := rspCommitUGC.Data.FileID | |
UploadContext := rspCreatrMaterial.Data.UploadContext | |
SummaryKey := hex.EncodeToString(hash.Sum(nil)) | |
_, err = d.FinishUploadMaterial(SummaryKey, VodVerifyKey, UploadContext, VodFileId) | |
if err != nil { | |
return err | |
} | |
return nil | |
} |
可以改成这样优化一下大文件的上传
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK 之前对stream.RangeRead不太了解,我优化下这部分代码
|
理论上这个秒传功能是针对单个客户的储存桶的 |
Congrats on merging your first pull request! We here at behavior bot are proud of you! |
…15347) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [xhofe/alist](https://togithub.com/alist-org/alist) | minor | `v3.28.0` -> `v3.29.1` | --- > [!WARNING] > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. --- ### Release Notes <details> <summary>alist-org/alist (xhofe/alist)</summary> ### [`v3.29.1`](https://togithub.com/alist-org/alist/releases/tag/v3.29.1) [Compare Source](https://togithub.com/alist-org/alist/compare/v3.29.0...v3.29.1) ##### 🐞 Bug Fixes - Task popped but not execute - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5565](https://togithub.com/alist-org/alist/issues/5565) [<samp>(68af2)</samp>](https://togithub.com/alist-org/alist/commit/68af284) ##### [View changes on GitHub](https://togithub.com/alist-org/alist/compare/v3.29.0...v3.29.1) ### [`v3.29.0`](https://togithub.com/alist-org/alist/releases/tag/v3.29.0) [Compare Source](https://togithub.com/alist-org/alist/compare/v3.28.0...v3.29.0) ##### 🚀 Features - Add `header` to `meta` - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5317](https://togithub.com/alist-org/alist/issues/5317) [<samp>(9ff83)</samp>](https://togithub.com/alist-org/alist/commit/9ff83a7) - Add ignore direct link params - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5434](https://togithub.com/alist-org/alist/issues/5434) [<samp>(c0f9c)</samp>](https://togithub.com/alist-org/alist/commit/c0f9c8e) - Refactor offline download ([#​5408](https://togithub.com/alist-org/alist/issues/5408) close [#​4108](https://togithub.com/alist-org/alist/issues/4108)) - by [@​xhofe](https://togithub.com/xhofe) and [@​renovate](https://togithub.com/renovate)\[bot] in[https://github.com/alist-org/alist/issues/5408](https://togithub.com/alist-org/alist/issues/5408)8 and[https://github.com/alist-org/alist/issues/4108](https://togithub.com/alist-org/alist/issues/4108)8 [<samp>(76928)</samp>](https://togithub.com/alist-org/alist/commit/769281b) - Add `115_share` driver ([#​5481](https://togithub.com/alist-org/alist/issues/5481) close [#​5384](https://togithub.com/alist-org/alist/issues/5384)) - by [@​SheltonZhu](https://togithub.com/SheltonZhu) in [https://github.com/alist-org/alist/issues/5481](https://togithub.com/alist-org/alist/issues/5481) and [https://github.com/alist-org/alist/issues/5384](https://togithub.com/alist-org/alist/issues/5384) [<samp>(da1c7)</samp>](https://togithub.com/alist-org/alist/commit/da1c7a4) - Invalidate old token after changing the password - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5515](https://togithub.com/alist-org/alist/issues/5515) [<samp>(3d518)</samp>](https://togithub.com/alist-org/alist/commit/3d51845) - Support using external dist files - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5531](https://togithub.com/alist-org/alist/issues/5531) [<samp>(6fc67)</samp>](https://togithub.com/alist-org/alist/commit/6fc6751) - Refactor task module - by [@​xhofe](https://togithub.com/xhofe) [<samp>(11a30)</samp>](https://togithub.com/alist-org/alist/commit/11a30c5) - Customize workers and retry of task (close [#​5493](https://togithub.com/alist-org/alist/issues/5493) fix [#​5274](https://togithub.com/alist-org/alist/issues/5274)) - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5493](https://togithub.com/alist-org/alist/issues/5493) and [https://github.com/alist-org/alist/issues/5274](https://togithub.com/alist-org/alist/issues/5274) [<samp>(7583c)</samp>](https://togithub.com/alist-org/alist/commit/7583c4d) - Retry all failed task - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5242](https://togithub.com/alist-org/alist/issues/5242) [<samp>(b2890)</samp>](https://togithub.com/alist-org/alist/commit/b2890f0) - Add chaoxing and vtencent driver ([#​5526](https://togithub.com/alist-org/alist/issues/5526) close [#​3347](https://togithub.com/alist-org/alist/issues/3347)) - by [@​msterzhang](https://togithub.com/msterzhang) in [https://github.com/alist-org/alist/issues/5526](https://togithub.com/alist-org/alist/issues/5526) and [https://github.com/alist-org/alist/issues/3347](https://togithub.com/alist-org/alist/issues/3347) [<samp>(12800)</samp>](https://togithub.com/alist-org/alist/commit/1280070) - Allow keep files in offline download - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/4678](https://togithub.com/alist-org/alist/issues/4678) [<samp>(b6134)</samp>](https://togithub.com/alist-org/alist/commit/b6134dc) - Customize allow `origins`, `headers` and `methods` - by [@​xhofe](https://togithub.com/xhofe) [<samp>(3f405)</samp>](https://togithub.com/alist-org/alist/commit/3f405de) - **cloudreve**: - Support thumbnail ([#​5373](https://togithub.com/alist-org/alist/issues/5373) close [#​5348](https://togithub.com/alist-org/alist/issues/5348)) - by [@​itsHenry35](https://togithub.com/itsHenry35) in [https://github.com/alist-org/alist/issues/5373](https://togithub.com/alist-org/alist/issues/5373) and [https://github.com/alist-org/alist/issues/5348](https://togithub.com/alist-org/alist/issues/5348) [<samp>(7f733)</samp>](https://togithub.com/alist-org/alist/commit/7f73354) - Folder size count and switch ([#​5457](https://togithub.com/alist-org/alist/issues/5457) close [#​5395](https://togithub.com/alist-org/alist/issues/5395)) - by [@​itsHenry35](https://togithub.com/itsHenry35) in [https://github.com/alist-org/alist/issues/5457](https://togithub.com/alist-org/alist/issues/5457) and [https://github.com/alist-org/alist/issues/5395](https://togithub.com/alist-org/alist/issues/5395) [<samp>(65c5e)</samp>](https://togithub.com/alist-org/alist/commit/65c5ec0) - **crypt**: - Optional pre-generated thumbnails - by [@​chaoqing](https://togithub.com/chaoqing) in [https://github.com/alist-org/alist/issues/5284](https://togithub.com/alist-org/alist/issues/5284) [<samp>(fb13d)</samp>](https://togithub.com/alist-org/alist/commit/fb13dae) - Add show hidden option - by [@​textrix](https://togithub.com/textrix) in [https://github.com/alist-org/alist/issues/5554](https://togithub.com/alist-org/alist/issues/5554) [<samp>(fe34d)</samp>](https://togithub.com/alist-org/alist/commit/fe34d30) - **google_drive**: - Add `hash_info`, `ctime`, `thumbnail` - by [@​foxxorcat](https://togithub.com/foxxorcat) in [https://github.com/alist-org/alist/issues/5334](https://togithub.com/alist-org/alist/issues/5334) [<samp>(1a283)</samp>](https://togithub.com/alist-org/alist/commit/1a283bb) - **offline_download**: - Add simple http tool - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/4002](https://togithub.com/alist-org/alist/issues/4002) [<samp>(34746)</samp>](https://togithub.com/alist-org/alist/commit/34746e9) - **onedrive**: - Custom host for download link - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5310](https://togithub.com/alist-org/alist/issues/5310) [<samp>(0fd51)</samp>](https://togithub.com/alist-org/alist/commit/0fd5164) - **sso**: - Custom username key for `OIDC` - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5169](https://togithub.com/alist-org/alist/issues/5169) [<samp>(e719a)</samp>](https://togithub.com/alist-org/alist/commit/e719a1a) - **webdav**: - Add `tls_insecure_skip_verify` field - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5490](https://togithub.com/alist-org/alist/issues/5490) [<samp>(91f51)</samp>](https://togithub.com/alist-org/alist/commit/91f51f1) ##### 🐞 Bug Fixes - Hash gcid empty file - by [@​foxxorcat](https://togithub.com/foxxorcat) in [https://github.com/alist-org/alist/issues/5394](https://togithub.com/alist-org/alist/issues/5394) [<samp>(cdfbe)</samp>](https://togithub.com/alist-org/alist/commit/cdfbe6d) - Incorrect content-type of apk files - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5385](https://togithub.com/alist-org/alist/issues/5385) [<samp>(4355d)</samp>](https://togithub.com/alist-org/alist/commit/4355dae) - Reflected XSS vulnerability plist api - by [@​xhofe](https://togithub.com/xhofe) [<samp>(61006)</samp>](https://togithub.com/alist-org/alist/commit/6100647) - `content-type` conflicts with [#​5420](https://togithub.com/alist-org/alist/issues/5420) - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5420](https://togithub.com/alist-org/alist/issues/5420) [<samp>(d2688)</samp>](https://togithub.com/alist-org/alist/commit/d26887d) - **115**: - Allow use proxy directly - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5324](https://togithub.com/alist-org/alist/issues/5324) [<samp>(e8958)</samp>](https://togithub.com/alist-org/alist/commit/e895801) - Limit request rate ([#​5367](https://togithub.com/alist-org/alist/issues/5367) close [#​5275](https://togithub.com/alist-org/alist/issues/5275)) - by [@​foxxorcat](https://togithub.com/foxxorcat) and [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5367](https://togithub.com/alist-org/alist/issues/5367) and [https://github.com/alist-org/alist/issues/5275](https://togithub.com/alist-org/alist/issues/5275) [<samp>(b9e19)</samp>](https://togithub.com/alist-org/alist/commit/b9e192b) - Fix driver package import and variable - by [@​SheltonZhu](https://togithub.com/SheltonZhu) in [https://github.com/alist-org/alist/issues/5482](https://togithub.com/alist-org/alist/issues/5482) [<samp>(3bbdd)</samp>](https://togithub.com/alist-org/alist/commit/3bbdd4f) - **aliyundrive_open**: - Change default api to raw server - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5358](https://togithub.com/alist-org/alist/issues/5358) [<samp>(7600d)</samp>](https://togithub.com/alist-org/alist/commit/7600dc2) - Upload progress for normal upload - by [@​NewbieOrange](https://togithub.com/NewbieOrange) in [https://github.com/alist-org/alist/issues/5398](https://togithub.com/alist-org/alist/issues/5398) [<samp>(8ef80)</samp>](https://togithub.com/alist-org/alist/commit/8ef8023) - Mitigation measures for 15-minute limit ([#​5560](https://togithub.com/alist-org/alist/issues/5560) close [#​5547](https://togithub.com/alist-org/alist/issues/5547)) - by [@​BlueSkyXN](https://togithub.com/BlueSkyXN) and [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5560](https://togithub.com/alist-org/alist/issues/5560) and [https://github.com/alist-org/alist/issues/5547](https://togithub.com/alist-org/alist/issues/5547) [<samp>(0fbb9)</samp>](https://togithub.com/alist-org/alist/commit/0fbb986) - **baidu_netdisk**: - Hash and `error 2` - by [@​foxxorcat](https://togithub.com/foxxorcat) in [https://github.com/alist-org/alist/issues/5356](https://togithub.com/alist-org/alist/issues/5356) [<samp>(8ef89)</samp>](https://togithub.com/alist-org/alist/commit/8ef89ad) - Upload file > 4GB - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5392](https://togithub.com/alist-org/alist/issues/5392) [<samp>(4fc0a)</samp>](https://togithub.com/alist-org/alist/commit/4fc0a77) - **deps**: - Update module github.com/ipfs/go-ipfs-api to v0.7.0 - by [@​renovate](https://togithub.com/renovate)\[bot] in[https://github.com/alist-org/alist/issues/5247](https://togithub.com/alist-org/alist/issues/5247)7 [<samp>(eb918)</samp>](https://togithub.com/alist-org/alist/commit/eb91865) - Update module github.com/aliyun/aliyun-oss-go-sdk to v2.2.9+incompatible - by [@​renovate](https://togithub.com/renovate)\[bot] in[https://github.com/alist-org/alist/issues/5141](https://togithub.com/alist-org/alist/issues/5141)1 [<samp>(69a98)</samp>](https://togithub.com/alist-org/alist/commit/69a98ea) - Update module golang.org/x/net to v0.17.0 \[security] - by [@​renovate](https://togithub.com/renovate)\[bot] in[https://github.com/alist-org/alist/issues/5370](https://togithub.com/alist-org/alist/issues/5370)0 [<samp>(cc86d)</samp>](https://togithub.com/alist-org/alist/commit/cc86d6f) - Update golang.org/x/exp digest to [`7918f67`](https://togithub.com/alist-org/alist/commit/7918f67) - by [@​renovate](https://togithub.com/renovate)\[bot] in[https://github.com/alist-org/alist/issues/5366](https://togithub.com/alist-org/alist/issues/5366)6 [<samp>(4dff4)</samp>](https://togithub.com/alist-org/alist/commit/4dff494) - Update module github.com/charmbracelet/lipgloss to v0.9.1 - by [@​renovate](https://togithub.com/renovate)\[bot] in[https://github.com/alist-org/alist/issues/5234](https://togithub.com/alist-org/alist/issues/5234)4 [<samp>(a6325)</samp>](https://togithub.com/alist-org/alist/commit/a632596) - Update module github.com/aws/aws-sdk-go to v1.46.7 - by [@​renovate](https://togithub.com/renovate)\[bot] in[https://github.com/alist-org/alist/issues/5068](https://togithub.com/alist-org/alist/issues/5068)8 [<samp>(a7421)</samp>](https://togithub.com/alist-org/alist/commit/a7421d8) - **local**: - Video file thumbnails not displaying on iOS Safari - by [@​gmugu](https://togithub.com/gmugu) in [https://github.com/alist-org/alist/issues/5420](https://togithub.com/alist-org/alist/issues/5420) [<samp>(867ac)</samp>](https://togithub.com/alist-org/alist/commit/867acca) - **mopan**: - 302 Redirect ([#​5505](https://togithub.com/alist-org/alist/issues/5505) close [#​5502](https://togithub.com/alist-org/alist/issues/5502)) - by [@​foxxorcat](https://togithub.com/foxxorcat) and [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5505](https://togithub.com/alist-org/alist/issues/5505) and [https://github.com/alist-org/alist/issues/5502](https://togithub.com/alist-org/alist/issues/5502) [<samp>(55a14)</samp>](https://togithub.com/alist-org/alist/commit/55a14bc) - **onedrive_app**: - Incorrect api on `_accessToken` - by [@​jeffmingup](https://togithub.com/jeffmingup) in [https://github.com/alist-org/alist/issues/5346](https://togithub.com/alist-org/alist/issues/5346) [<samp>(35d67)</samp>](https://togithub.com/alist-org/alist/commit/35d6722) - **terabox**: - Auto refresh `JsToken` - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5277](https://togithub.com/alist-org/alist/issues/5277) [<samp>(6b67a)</samp>](https://togithub.com/alist-org/alist/commit/6b67a36) - Encode parameters for `filemanager` api - by [@​URenko](https://togithub.com/URenko) in [https://github.com/alist-org/alist/issues/5308](https://togithub.com/alist-org/alist/issues/5308) [<samp>(e1ef6)</samp>](https://togithub.com/alist-org/alist/commit/e1ef690) - **vtencent**: - Hack file with size 0 but actual size is not 0 - by [@​xhofe](https://togithub.com/xhofe) [<samp>(d455a)</samp>](https://togithub.com/alist-org/alist/commit/d455a23) - **weiyun**: - Unmarshal overflow - by [@​foxxorcat](https://togithub.com/foxxorcat) in [https://github.com/alist-org/alist/issues/5459](https://togithub.com/alist-org/alist/issues/5459) [<samp>(68f44)</samp>](https://togithub.com/alist-org/alist/commit/68f440a) - **wopan**: - Fatal error concurrent map writes - by [@​xhofe](https://togithub.com/xhofe) in [https://github.com/alist-org/alist/issues/5352](https://togithub.com/alist-org/alist/issues/5352) [<samp>(1ebc9)</samp>](https://togithub.com/alist-org/alist/commit/1ebc96a) ##### 🏎 Performance - **webdav**: Support request with cookies - by [@​gmugu](https://togithub.com/gmugu) in [https://github.com/alist-org/alist/issues/5391](https://togithub.com/alist-org/alist/issues/5391) [<samp>(aaffa)</samp>](https://togithub.com/alist-org/alist/commit/aaffaee) ##### [View changes on GitHub](https://togithub.com/alist-org/alist/compare/v3.28.0...v3.29.0) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://togithub.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy42OC4wIiwidXBkYXRlZEluVmVyIjoiMzcuNjguMSIsInRhcmdldEJyYW5jaCI6Im1hc3RlciJ9-->