@@ -3,7 +3,6 @@ package _115_open
3
3
import (
4
4
"context"
5
5
"fmt"
6
- "io"
7
6
"net/http"
8
7
"strconv"
9
8
"strings"
@@ -14,6 +13,8 @@ import (
14
13
"github.com/OpenListTeam/OpenList/internal/driver"
15
14
"github.com/OpenListTeam/OpenList/internal/model"
16
15
"github.com/OpenListTeam/OpenList/internal/op"
16
+ "github.com/OpenListTeam/OpenList/internal/stream"
17
+ "github.com/OpenListTeam/OpenList/pkg/http_range"
17
18
"github.com/OpenListTeam/OpenList/pkg/utils"
18
19
sdk "github.com/xhofe/115-sdk-go"
19
20
"golang.org/x/time/rate"
@@ -215,28 +216,27 @@ func (d *Open115) Remove(ctx context.Context, obj model.Obj) error {
215
216
}
216
217
217
218
func (d * Open115 ) Put (ctx context.Context , dstDir model.Obj , file model.FileStreamer , up driver.UpdateProgress ) error {
218
- if err := d .WaitLimit (ctx ); err != nil {
219
- return err
220
- }
221
- tempF , err := file .CacheFullInTempFile ()
219
+ err := d .WaitLimit (ctx )
222
220
if err != nil {
223
221
return err
224
222
}
225
- // cal full sha1
226
- sha1 , err := utils .HashReader (utils .SHA1 , tempF )
227
- if err != nil {
228
- return err
223
+ sha1 := file .GetHash ().GetHash (utils .SHA1 )
224
+ if len (sha1 ) != utils .SHA1 .Width {
225
+ _ , sha1 , err = stream .CacheFullInTempFileAndHash (file , utils .SHA256 )
226
+ if err != nil {
227
+ return err
228
+ }
229
229
}
230
- _ , err = tempF .Seek (0 , io .SeekStart )
231
- if err != nil {
232
- return err
230
+ const PreHashSize int64 = 128 * utils .KB
231
+ hashSize := PreHashSize
232
+ if file .GetSize () < PreHashSize {
233
+ hashSize = file .GetSize ()
233
234
}
234
- // pre 128k sha1
235
- sha1128k , err := utils .HashReader (utils .SHA1 , io .LimitReader (tempF , 128 * 1024 ))
235
+ reader , err := file .RangeRead (http_range.Range {Start : 0 , Length : hashSize })
236
236
if err != nil {
237
237
return err
238
238
}
239
- _ , err = tempF . Seek ( 0 , io . SeekStart )
239
+ sha1128k , err := utils . HashReader ( utils . SHA1 , reader )
240
240
if err != nil {
241
241
return err
242
242
}
@@ -265,15 +265,11 @@ func (d *Open115) Put(ctx context.Context, dstDir model.Obj, file model.FileStre
265
265
if err != nil {
266
266
return err
267
267
}
268
- _ , err = tempF .Seek (start , io .SeekStart )
269
- if err != nil {
270
- return err
271
- }
272
- signVal , err := utils .HashReader (utils .SHA1 , io .LimitReader (tempF , end - start + 1 ))
268
+ reader , err = file .RangeRead (http_range.Range {Start : start , Length : end - start + 1 })
273
269
if err != nil {
274
270
return err
275
271
}
276
- _ , err = tempF . Seek ( 0 , io . SeekStart )
272
+ signVal , err := utils . HashReader ( utils . SHA1 , reader )
277
273
if err != nil {
278
274
return err
279
275
}
@@ -299,7 +295,7 @@ func (d *Open115) Put(ctx context.Context, dstDir model.Obj, file model.FileStre
299
295
return err
300
296
}
301
297
// 4. upload
302
- err = d .multpartUpload (ctx , tempF , file , up , tokenResp , resp )
298
+ err = d .multpartUpload (ctx , file , up , tokenResp , resp )
303
299
if err != nil {
304
300
return err
305
301
}
0 commit comments