@@ -136,7 +136,7 @@ func (d *BaiduNetdisk) getFiles(dir string) ([]File, error) {
136
136
return res , nil
137
137
}
138
138
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 ) {
140
140
var resp DownloadResp
141
141
params := map [string ]string {
142
142
"method" : "filemetas" ,
@@ -164,7 +164,7 @@ func (d *BaiduNetdisk) linkOfficial(file model.Obj, args model.LinkArgs) (*model
164
164
}, nil
165
165
}
166
166
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 ) {
168
168
var resp DownloadResp2
169
169
param := map [string ]string {
170
170
"target" : fmt .Sprintf ("[\" %s\" ]" , file .GetPath ()),
@@ -230,22 +230,72 @@ func joinTime(form map[string]string, ctime, mtime int64) {
230
230
231
231
const (
232
232
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 // 文档写的是
6D4E
1024/没写 ,但实际测试是 2048
237
+ SliceStep int64 = 1 * utils .MB
235
238
)
236
239
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
+
238
253
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
+
239
269
return d .CustomUploadPartSize
240
270
}
271
+
272
+ maxSliceSize := DefaultSliceSize
273
+
241
274
switch d .vipType {
242
275
case 1 :
243
- return VipSliceSize
276
+ maxSliceSize = VipSliceSize
244
277
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
+ }
248
292
}
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
249
299
}
250
300
251
301
// func encodeURIComponent(str string) string {
0 commit comments