@@ -3,22 +3,20 @@ package multipart
3
3
import (
4
4
"errors"
5
5
"fmt"
6
- "github.com/cespare/xxhash"
7
6
ioutils "github.com/jfrog/gofrog/io"
8
- "hash"
9
7
"io"
10
8
"mime/multipart"
11
9
"os"
12
10
)
13
11
14
- type FileWriterFunc func (fileName string ) (io.Writer , error )
12
+ type FileWriterFunc func (fileName string ) (io.WriteCloser , error )
15
13
16
14
func ReadFilesFromStream (multipartReader * multipart.Reader , fileWriterFunc FileWriterFunc ) error {
17
15
for {
18
16
// Read the next file streamed from client
19
17
fileReader , err := multipartReader .NextPart ()
20
18
if err != nil {
21
- if err == io .EOF {
19
+ if errors . Is ( err , io .EOF ) {
22
20
break
23
21
}
24
22
return fmt .Errorf ("failed to read file: %w" , err )
@@ -32,19 +30,21 @@ func ReadFilesFromStream(multipartReader *multipart.Reader, fileWriterFunc FileW
32
30
if _ , err = io .Copy (fileWriter , fileReader ); err != nil {
33
31
return fmt .Errorf ("failed writing '%s' file: %w" , fileName , err )
34
32
}
33
+ ioutils .Close (fileWriter , & err )
35
34
}
36
35
return nil
37
36
}
38
37
39
- func WriteFilesToStream (writer io.Writer , filesList []string ) error {
40
- multipartWriter := multipart .NewWriter (writer )
41
- for _ , filePath := range filesList {
38
+ func WriteFilesToStream (multipartWriter * multipart.Writer , filePaths []string ) (err error ) {
39
+ defer ioutils .Close (multipartWriter , & err )
40
+
41
+ for _ , filePath := range filePaths {
42
42
fileReader , err := os .Open (filePath )
43
43
if err != nil {
44
44
return fmt .Errorf ("failed to open file: %w" , err )
45
45
}
46
46
defer ioutils .Close (fileReader , & err )
47
- fileWriter , err := multipartWriter .CreateFormFile ("fieldname " , filePath )
47
+ fileWriter , err := multipartWriter .CreateFormFile ("file " , filePath )
48
48
if err != nil {
49
49
return fmt .Errorf ("failed to CreateFormFile: %w" , err )
50
50
}
@@ -55,39 +55,3 @@ func WriteFilesToStream(writer io.Writer, filesList []string) error {
55
55
}
56
56
return nil
57
57
}
58
-
59
- func getFileWriter (fileName string ) (fileWriter io.Writer , err error ) {
60
- lockfileMock := map [string ]string {
61
- "SDFDSFSDFSDFDSF" : "file1" ,
62
- "XXSDFDSFSDFSDFDSF" : "file2" ,
63
- }
64
- realFileName := lockfileMock [fileName ]
65
- fileWriter , err = os .Create (realFileName )
66
- if err != nil {
67
- return nil , fmt .Errorf ("create file: %w" , err )
68
- }
69
- // Currently we are using the file name as the hash
70
- fileHash := fileName
71
- return io .MultiWriter (fileWriter , NewHashWrapper (fileHash )), nil
72
- }
73
-
74
- type HashWrapper struct {
75
- hash hash.Hash64
76
- actualChecksum string
77
- }
78
-
79
- func NewHashWrapper (actualChecksum string ) * HashWrapper {
80
- return & HashWrapper {hash : xxhash .New (), actualChecksum : actualChecksum }
81
- }
82
-
83
- func (hw * HashWrapper ) Write (p []byte ) (n int , err error ) {
84
- n , err = hw .hash .Write (p )
85
- if fmt .Sprintf ("%x" , hw .hash .Sum (nil )) != hw .actualChecksum {
86
- err = errors .New ("checksum mismatch" )
87
- }
88
- return
89
- }
90
-
91
- func myMain (filepath string ) {
92
- ReadFilesFromStream (nil , getFileWriter )
93
- }
0 commit comments