@@ -136,7 +136,7 @@ func (d *BaiduNetdisk) getFiles(dir string) ([]File, error) {
136136 return res , nil
137137}
138138
139- func (d * BaiduNetdisk ) linkOfficial (file model.Obj , args model.LinkArgs ) (* model.Link , error ) {
139+ func (d * BaiduNetdisk ) linkOfficial (file model.Obj , _ model.LinkArgs ) (* model.Link , error ) {
140140 var resp DownloadResp
141141 params := map [string ]string {
142142 "method" : "filemetas" ,
@@ -164,7 +164,7 @@ func (d *BaiduNetdisk) linkOfficial(file model.Obj, args model.LinkArgs) (*model
164164 }, nil
165165}
166166
167- func (d * BaiduNetdisk ) linkCrack (file model.Obj , args model.LinkArgs ) (* model.Link , error ) {
167+ func (d * BaiduNetdisk ) linkCrack (file model.Obj , _ model.LinkArgs ) (* model.Link , error ) {
168168 var resp DownloadResp2
169169 param := map [string ]string {
170170 "target" : fmt .Sprintf ("[\" %s\" ]" , file .GetPath ()),
@@ -230,22 +230,72 @@ func joinTime(form map[string]string, ctime, mtime int64) {
230230
231231const (
232232 DefaultSliceSize int64 = 4 * utils .MB
233- VipSliceSize = 16 * utils .MB
234- SVipSliceSize = 32 * utils .MB
233+ VipSliceSize int64 = 16 * utils .MB
234+ SVipSliceSize int64 = 32 * utils .MB
235+
236+ MaxSliceNum = 2048 // 文档写的是 1024/没写 ,但实际测试是 2048
237+ SliceStep int64 = 1 * utils .MB
235238)
236239
237- func (d * BaiduNetdisk ) getSliceSize () int64 {
240+ func (d * BaiduNetdisk ) getSliceSize (filesize int64 ) int64 {
241+ // 非会员固定为 4MB
242+ if d .vipType == 0 {
243+ if d .CustomUploadPartSize != 0 {
244+ log .Warnf ("CustomUploadPartSize is not supported for non-vip user, use DefaultSliceSize" )
245+ }
246+ if filesize > MaxSliceNum * DefaultSliceSize {
247+ log .Warnf ("File size(%d) is too large, may cause upload failure" , filesize )
248+ }
249+
250+ return DefaultSliceSize
251+ }
252+
238253 if d .CustomUploadPartSize != 0 {
254+ if d .CustomUploadPartSize < DefaultSliceSize {
255+ log .Warnf ("CustomUploadPartSize(%d) is less than DefaultSliceSize(%d), use DefaultSliceSize" , d .CustomUploadPartSize , DefaultSliceSize )
256+ return DefaultSliceSize
257+ }
258+
259+ if d .vipType == 1 && d .CustomUploadPartSize > VipSliceSize {
260+ log .Warnf ("CustomUploadPartSize(%d) is greater than VipSliceSize(%d), use VipSliceSize" , d .CustomUploadPartSize , VipSliceSize )
261+ return VipSliceSize
262+ }
263+
264+ if d .vipType == 2 && d .CustomUploadPartSize > SVipSliceSize {
265+ log .Warnf ("CustomUploadPartSize(%d) is greater than SVipSliceSize(%d), use SVipSliceSize" , d .CustomUploadPartSize , SVipSliceSize )
266+ return SVipSliceSize
267+ }
268+
239269 return d .CustomUploadPartSize
240270 }
271+
272+ maxSliceSize := DefaultSliceSize
273+
241274 switch d .vipType {
242275 case 1 :
243- return VipSliceSize
276+ maxSliceSize = VipSliceSize
244277 case 2 :
245- return SVipSliceSize
246- default :
247- return DefaultSliceSize
278+ maxSliceSize = SVipSliceSize
279+ }
280+
281+ // upload on low bandwidth
282+ if d .LowBandwithUploadMode {
283+ size := DefaultSliceSize
284+
285+ for size <= maxSliceSize {
286+ if filesize <= MaxSliceNum * size {
287+ return size
288+ }
289+
290+ size += SliceStep
291+ }
248292 }
293+
294+ if filesize > MaxSliceNum * maxSliceSize {
295+ log .Warnf ("File size(%d) is too large, may cause upload failure" , filesize )
296+ }
297+
298+ return maxSliceSize
249299}
250300
251301// func encodeURIComponent(str string) string {
0 commit comments