[#1420] added filesystem.NewFileFromBytes

This commit is contained in:
David Schissler
2022-12-29 18:51:27 +02:00
committed by GitHub
parent 079616ee8e
commit 775417ac2b
2 changed files with 70 additions and 1 deletions
+41
View File
@@ -1,6 +1,8 @@
package filesystem
import (
"bytes"
"errors"
"fmt"
"io"
"mime/multipart"
@@ -46,6 +48,23 @@ func NewFileFromPath(path string) (*File, error) {
return f, nil
}
// NewFileFromBytes creates a new File instance from the provided byte slice.
func NewFileFromBytes(b []byte, name string) (*File, error) {
size := len(b)
if size == 0 {
return nil, errors.New("cannot create an empty file")
}
f := &File{}
f.Reader = &BytesReader{b}
f.Size = int64(size)
f.OriginalName = name
f.Name = normalizeName(f.Reader, f.OriginalName)
return f, nil
}
// NewFileFromMultipart creates a new File instace from the provided multipart header.
func NewFileFromMultipart(mh *multipart.FileHeader) (*File, error) {
f := &File{}
@@ -87,6 +106,28 @@ func (r *PathReader) Open() (io.ReadSeekCloser, error) {
// -------------------------------------------------------------------
var _ FileReader = (*BytesReader)(nil)
type BytesReader struct {
Bytes []byte
}
// Open implements the [filesystem.FileReader] interface.
func (r *BytesReader) Open() (io.ReadSeekCloser, error) {
return &bytesReadSeekCloser{bytes.NewReader(r.Bytes)}, nil
}
// bytesReadSeekCloser implements io.ReadSeekCloser
type bytesReadSeekCloser struct {
*bytes.Reader
}
func (r *bytesReadSeekCloser) Close() error {
return nil
}
// -------------------------------------------------------------------
var extInvalidCharsRegex = regexp.MustCompile(`[^\w\.\*\-\+\=\#]+`)
func normalizeName(fr FileReader, name string) string {