@@ -11,7 +11,6 @@ import (
1111 "mime/multipart"
1212 "os"
1313 "path"
14- "path/filepath"
1514 "strconv"
1615 "strings"
1716 "sync"
@@ -71,7 +70,7 @@ type localSaver struct {
7170// func(dir fs.FS, filename, ext string) string
7271//
7372// dir 为所属的文件系统,filename 为文件名部分,可能包含部分目录名称,ext 为 filename 中的扩展名部分,
74- // 返回值是修正后的 filename,实现者需要保证 filename 在 dir 下是唯一的。
73+ // 返回值是修正后的 filename,实现者需要保证 filename 在 dir 下是唯一的,filename 的路径分隔符必须是 /,不随系统而改变 。
7574// 如果为空,则会采用 [Filename] 作为默认值;
7675func NewLocalSaver (root * os.Root , baseURL , format string , f func (dir fs.FS , filename , ext string ) string ) (Deleter , error ) {
7776 if root == nil {
@@ -121,7 +120,7 @@ func (s *localSaver) Save(f multipart.File, filename, ext string) (string, error
121120 return "" , err
122121 }
123122
124- return s .baseURL + path .Join (relDir , filepath .Base (p )), nil
123+ return s .baseURL + path .Join (relDir , path .Base (p )), nil
125124}
126125
127126func (s * localSaver ) Delete (filename string ) error {
@@ -134,7 +133,7 @@ func (s *localSaver) createFile(relDir string, filename, ext string) (string, *o
134133 s .moveMux .Lock ()
135134 defer s .moveMux .Unlock ()
136135
137- p := s .filenames (s .root .FS (), filepath .Join (relDir , filename ), ext )
136+ p := s .filenames (s .root .FS (), path .Join (relDir , filename ), ext )
138137 destFile , err := s .root .Create (p )
139138 if err != nil {
140139 return "" , nil , err
@@ -149,14 +148,14 @@ func Filename(dir fs.FS, s, ext string) string {
149148 base := strings .TrimSuffix (s , ext )
150149
151150 count := 1
152- path := s
151+ p := s
153152
154153RET:
155- if _ , err := fs .Stat (dir , path ); errors .Is (err , os .ErrNotExist ) {
156- return path
154+ if _ , err := fs .Stat (dir , p ); errors .Is (err , os .ErrNotExist ) {
155+ return p
157156 }
158157
159- path = base + "_" + strconv .Itoa (count ) + ext
158+ p = base + "_" + strconv .Itoa (count ) + ext
160159 count ++
161160 goto RET
162161}
0 commit comments