Skip to content

Commit

Permalink
update deps
Browse files Browse the repository at this point in the history
  • Loading branch information
sverdlov93 committed Mar 11, 2024
1 parent 80e250f commit ba8fe3a
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 18 deletions.
29 changes: 14 additions & 15 deletions http/filestream/filestream.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,16 @@ import (
ioutils "github.com/jfrog/gofrog/io"
"io"
"mime/multipart"
"os"
)

const (
FileType = "file"
)

// The expected type of function that should be provided to the ReadFilesFromStream func, that returns the writer that should handle each file
type FileHandlerFunc func(fileName string) (writer io.WriteCloser, err error)
type FileWriterFunc func(fileName string) (writer io.WriteCloser, err error)

func ReadFilesFromStream(multipartReader *multipart.Reader, fileHandlerFunc FileHandlerFunc) error {
func ReadFilesFromStream(multipartReader *multipart.Reader, fileWriterFunc FileWriterFunc) error {
for {
// Read the next file streamed from client
fileReader, err := multipartReader.NextPart()
Expand All @@ -26,7 +25,7 @@ func ReadFilesFromStream(multipartReader *multipart.Reader, fileHandlerFunc File
}
return fmt.Errorf("failed to read file: %w", err)
}
err = readFile(fileReader, fileHandlerFunc)
err = readFile(fileReader, fileWriterFunc)
if err != nil {
return err
}
Expand All @@ -35,9 +34,9 @@ func ReadFilesFromStream(multipartReader *multipart.Reader, fileHandlerFunc File
return nil
}

func readFile(fileReader *multipart.Part, fileHandlerFunc FileHandlerFunc) (err error) {
func readFile(fileReader *multipart.Part, fileWriterFunc FileWriterFunc) (err error) {
fileName := fileReader.FileName()
fileWriter, err := fileHandlerFunc(fileName)
fileWriter, err := fileWriterFunc(fileName)
if err != nil {
return err
}
Expand All @@ -48,9 +47,12 @@ func readFile(fileReader *multipart.Part, fileHandlerFunc FileHandlerFunc) (err
return err
}

func WriteFilesToStream(multipartWriter *multipart.Writer, filePaths []string) (err error) {
for _, filePath := range filePaths {
if err = writeFile(multipartWriter, filePath); err != nil {
// The expected type of function that should be provided to the WriteFilesToStream func, that returns the reader that should handle each file
type FileReaderFunc func(fileName string) (writer io.ReadCloser, err error)

func WriteFilesToStream(multipartWriter *multipart.Writer, checksumsList []string, fileReaderFunc FileReaderFunc) (err error) {
for _, fileChecksum := range checksumsList {
if err = writeFile(multipartWriter, fileChecksum, fileReaderFunc); err != nil {
return
}
}
Expand All @@ -60,13 +62,10 @@ func WriteFilesToStream(multipartWriter *multipart.Writer, filePaths []string) (
return multipartWriter.Close()
}

func writeFile(multipartWriter *multipart.Writer, filePath string) (err error) {
fileReader, err := os.Open(filePath)
if err != nil {
return fmt.Errorf("failed to open file: %w", err)
}
func writeFile(multipartWriter *multipart.Writer, fileChecksum string, fileReaderFunc FileReaderFunc) (err error) {
fileReader, err := fileReaderFunc(fileChecksum)
defer ioutils.Close(fileReader, &err)
fileWriter, err := multipartWriter.CreateFormFile(FileType, filePath)
fileWriter, err := multipartWriter.CreateFormFile(FileType, fileChecksum)
if err != nil {
return fmt.Errorf("failed to CreateFormFile: %w", err)
}
Expand Down
10 changes: 7 additions & 3 deletions http/filestream/filestream_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@ func TestWriteFilesToStreamAndReadFilesFromStream(t *testing.T) {
// Create the multipart writer that will stream our files
body := &bytes.Buffer{}
multipartWriter := multipart.NewWriter(body)
assert.NoError(t, WriteFilesToStream(multipartWriter, []string{file1, file2}))
assert.NoError(t, WriteFilesToStream(multipartWriter, []string{file1, file2}, simpleFileReader))

// Create local temp dir that will store our files
targetDir = t.TempDir()

// Create the multipart reader that will read the files from the stream
multipartReader := multipart.NewReader(body, multipartWriter.Boundary())
assert.NoError(t, ReadFilesFromStream(multipartReader, simpleFileHandler))
assert.NoError(t, ReadFilesFromStream(multipartReader, simpleFileWriter))

// Validate file 1 transferred successfully
file1 = filepath.Join(targetDir, "test1.txt")
Expand All @@ -51,6 +51,10 @@ func TestWriteFilesToStreamAndReadFilesFromStream(t *testing.T) {
assert.NoError(t, os.Remove(file2))
}

func simpleFileHandler(fileName string) (fileWriter io.WriteCloser, err error) {
func simpleFileReader(fileName string) (fileWriter io.ReadCloser, err error) {
return os.Open(filepath.Join(targetDir, fileName))
}

func simpleFileWriter(fileName string) (fileWriter io.WriteCloser, err error) {
return os.Create(filepath.Join(targetDir, fileName))
}

0 comments on commit ba8fe3a

Please sign in to comment.