mirror of
https://github.com/HChaZZY/alist.git
synced 2025-12-06 11:03:49 +08:00
perf: optimize IO read/write usage (#8243)
* perf: optimize IO read/write usage * . * Update drivers/139/driver.go Co-authored-by: MadDogOwner <xiaoran@xrgzs.top> --------- Co-authored-by: MadDogOwner <xiaoran@xrgzs.top>
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
package handles
|
||||
|
||||
import (
|
||||
"github.com/alist-org/alist/v3/internal/task"
|
||||
"github.com/alist-org/alist/v3/pkg/utils"
|
||||
"io"
|
||||
"net/url"
|
||||
stdpath "path"
|
||||
@@ -12,6 +10,8 @@ import (
|
||||
"github.com/alist-org/alist/v3/internal/fs"
|
||||
"github.com/alist-org/alist/v3/internal/model"
|
||||
"github.com/alist-org/alist/v3/internal/stream"
|
||||
"github.com/alist-org/alist/v3/internal/task"
|
||||
"github.com/alist-org/alist/v3/pkg/utils"
|
||||
"github.com/alist-org/alist/v3/server/common"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
@@ -44,7 +44,7 @@ func FsStream(c *gin.Context) {
|
||||
}
|
||||
if !overwrite {
|
||||
if res, _ := fs.Get(c, path, &fs.GetArgs{NoLog: true}); res != nil {
|
||||
_, _ = io.Copy(io.Discard, c.Request.Body)
|
||||
_, _ = utils.CopyWithBuffer(io.Discard, c.Request.Body)
|
||||
common.ErrorStrResp(c, "file exists", 403)
|
||||
return
|
||||
}
|
||||
@@ -66,6 +66,10 @@ func FsStream(c *gin.Context) {
|
||||
if sha256 := c.GetHeader("X-File-Sha256"); sha256 != "" {
|
||||
h[utils.SHA256] = sha256
|
||||
}
|
||||
mimetype := c.GetHeader("Content-Type")
|
||||
if len(mimetype) == 0 {
|
||||
mimetype = utils.GetMimeType(name)
|
||||
}
|
||||
s := &stream.FileStream{
|
||||
Obj: &model.Object{
|
||||
Name: name,
|
||||
@@ -74,7 +78,7 @@ func FsStream(c *gin.Context) {
|
||||
HashInfo: utils.NewHashInfoByMap(h),
|
||||
},
|
||||
Reader: c.Request.Body,
|
||||
Mimetype: c.GetHeader("Content-Type"),
|
||||
Mimetype: mimetype,
|
||||
WebPutAsTask: asTask,
|
||||
}
|
||||
var t task.TaskExtensionInfo
|
||||
@@ -89,6 +93,9 @@ func FsStream(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
if t == nil {
|
||||
if n, _ := io.ReadFull(c.Request.Body, []byte{0}); n == 1 {
|
||||
_, _ = utils.CopyWithBuffer(io.Discard, c.Request.Body)
|
||||
}
|
||||
common.SuccessResp(c)
|
||||
return
|
||||
}
|
||||
@@ -114,7 +121,7 @@ func FsForm(c *gin.Context) {
|
||||
}
|
||||
if !overwrite {
|
||||
if res, _ := fs.Get(c, path, &fs.GetArgs{NoLog: true}); res != nil {
|
||||
_, _ = io.Copy(io.Discard, c.Request.Body)
|
||||
_, _ = utils.CopyWithBuffer(io.Discard, c.Request.Body)
|
||||
common.ErrorStrResp(c, "file exists", 403)
|
||||
return
|
||||
}
|
||||
@@ -150,6 +157,10 @@ func FsForm(c *gin.Context) {
|
||||
if sha256 := c.GetHeader("X-File-Sha256"); sha256 != "" {
|
||||
h[utils.SHA256] = sha256
|
||||
}
|
||||
mimetype := file.Header.Get("Content-Type")
|
||||
if len(mimetype) == 0 {
|
||||
mimetype = utils.GetMimeType(name)
|
||||
}
|
||||
s := stream.FileStream{
|
||||
Obj: &model.Object{
|
||||
Name: name,
|
||||
@@ -158,7 +169,7 @@ func FsForm(c *gin.Context) {
|
||||
HashInfo: utils.NewHashInfoByMap(h),
|
||||
},
|
||||
Reader: f,
|
||||
Mimetype: file.Header.Get("Content-Type"),
|
||||
Mimetype: mimetype,
|
||||
WebPutAsTask: asTask,
|
||||
}
|
||||
var t task.TaskExtensionInfo
|
||||
@@ -168,12 +179,7 @@ func FsForm(c *gin.Context) {
|
||||
}{f}
|
||||
t, err = fs.PutAsTask(c, dir, &s)
|
||||
} else {
|
||||
ss, err := stream.NewSeekableStream(s, nil)
|
||||
if err != nil {
|
||||
common.ErrorResp(c, err, 500)
|
||||
return
|
||||
}
|
||||
err = fs.PutDirectly(c, dir, ss, true)
|
||||
err = fs.PutDirectly(c, dir, &s, true)
|
||||
}
|
||||
if err != nil {
|
||||
common.ErrorResp(c, err, 500)
|
||||
|
||||
Reference in New Issue
Block a user