File tree Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments