Skip to content

Commit 9f2f40f

Browse files
committed
update deps
1 parent 5aef0ea commit 9f2f40f

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

http/multipart/multipart.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package multipart
2+
3+
import (
4+
"fmt"
5+
fileutils "github.com/jfrog/gofrog/io"
6+
"io"
7+
"mime/multipart"
8+
"os"
9+
)
10+
11+
type FileWriterFunc func(fileName string) (io.WriteCloser, error)
12+
13+
func ReadFromStream(multipartReader *multipart.Reader, fileWriterFunc FileWriterFunc) error {
14+
for {
15+
// Read the next file streamed from client
16+
fileReader, err := multipartReader.NextPart()
17+
if err != nil {
18+
if err == io.EOF {
19+
break
20+
}
21+
return fmt.Errorf("failed to read file: %w", err)
22+
}
23+
fileName := fileReader.FileName()
24+
fileWriter, err := fileWriterFunc(fileName)
25+
if err != nil {
26+
return err
27+
}
28+
defer fileutils.Close(fileWriter, &err)
29+
30+
// Stream file directly to disk
31+
if _, err = io.Copy(fileWriter, fileReader); err != nil {
32+
return fmt.Errorf("failed writing '%s' file: %w", fileName, err)
33+
}
34+
}
35+
return nil
36+
}
37+
38+
func exampleFunc(filepath string) (fileWriter io.WriteCloser, err error) {
39+
fileWriter, err = os.Create(filepath)
40+
if err != nil {
41+
return nil, fmt.Errorf("create file: %w", err)
42+
}
43+
return
44+
}
45+
46+
func myMain(filepath string) {
47+
ReadFromStream(nil, exampleFunc)
48+
}

0 commit comments

Comments
 (0)