Skip to content

Commit ded67b7

Browse files
committed
fix(115): optimize upload (close #364)
1 parent 4590795 commit ded67b7

File tree

3 files changed

+22
-29
lines changed

3 files changed

+22
-29
lines changed

drivers/115/driver.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
"github.com/OpenListTeam/OpenList/internal/driver"
99
"github.com/OpenListTeam/OpenList/internal/model"
10+
streamPkg "github.com/OpenListTeam/OpenList/internal/stream"
1011
"github.com/OpenListTeam/OpenList/pkg/http_range"
1112
"github.com/OpenListTeam/OpenList/pkg/utils"
1213
driver115 "github.com/SheltonZhu/115driver/pkg/driver"
@@ -184,12 +185,8 @@ func (d *Pan115) Put(ctx context.Context, dstDir model.Obj, stream model.FileStr
184185
}
185186
preHash = strings.ToUpper(preHash)
186187
fullHash := stream.GetHash().GetHash(utils.SHA1)
187-
if len(fullHash) <= 0 {
188-
tmpF, err := stream.CacheFullInTempFile()
189-
if err != nil {
190-
return nil, err
191-
}
192-
fullHash, err = utils.HashFile(utils.SHA1, tmpF)
188+
if len(fullHash) != utils.SHA1.Width {
189+
_, fullHash, err = streamPkg.CacheFullInTempFileAndHash(stream, utils.SHA256)
193190
if err != nil {
194191
return nil, err
195192
}

drivers/115_open/driver.go

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package _115_open
33
import (
44
"context"
55
"fmt"
6-
"io"
76
"net/http"
87
"strconv"
98
"strings"
@@ -14,6 +13,8 @@ import (
1413
"github.com/OpenListTeam/OpenList/internal/driver"
1514
"github.com/OpenListTeam/OpenList/internal/model"
1615
"github.com/OpenListTeam/OpenList/internal/op"
16+
"github.com/OpenListTeam/OpenList/internal/stream"
17+
"github.com/OpenListTeam/OpenList/pkg/http_range"
1718
"github.com/OpenListTeam/OpenList/pkg/utils"
1819
sdk "github.com/xhofe/115-sdk-go"
1920
"golang.org/x/time/rate"
@@ -215,28 +216,27 @@ func (d *Open115) Remove(ctx context.Context, obj model.Obj) error {
215216
}
216217

217218
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)
222220
if err != nil {
223221
return err
224222
}
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+
}
229229
}
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()
233234
}
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})
236236
if err != nil {
237237
return err
238238
}
239-
_, err = tempF.Seek(0, io.SeekStart)
239+
sha1128k, err := utils.HashReader(utils.SHA1, reader)
240240
if err != nil {
241241
return err
242242
}
@@ -265,15 +265,11 @@ func (d *Open115) Put(ctx context.Context, dstDir model.Obj, file model.FileStre
265265
if err != nil {
266266
return err
267267
}
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})
273269
if err != nil {
274270
return err
275271
}
276-
_, err = tempF.Seek(0, io.SeekStart)
272+
signVal, err := utils.HashReader(utils.SHA1, reader)
277273
if err != nil {
278274
return err
279275
}
@@ -299,7 +295,7 @@ func (d *Open115) Put(ctx context.Context, dstDir model.Obj, file model.FileStre
299295
return err
300296
}
301297
// 4. upload
302-
err = d.multpartUpload(ctx, tempF, file, up, tokenResp, resp)
298+
err = d.multpartUpload(ctx, file, up, tokenResp, resp)
303299
if err != nil {
304300
return err
305301
}

drivers/115_open/upload.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func (d *Open115) singleUpload(ctx context.Context, tempF model.File, tokenResp
6868
// } `json:"data"`
6969
// }
7070

71-
func (d *Open115) multpartUpload(ctx context.Context, tempF model.File, stream model.FileStreamer, up driver.UpdateProgress, tokenResp *sdk.UploadGetTokenResp, initResp *sdk.UploadInitResp) error {
71+
func (d *Open115) multpartUpload(ctx context.Context, stream model.FileStreamer, up driver.UpdateProgress, tokenResp *sdk.UploadGetTokenResp, initResp *sdk.UploadInitResp) error {
7272
fileSize := stream.GetSize()
7373
chunkSize := calPartSize(fileSize)
7474

0 commit comments

Comments
 (0)