Refactor: use universal FileHeader when handling file upload, remove usage of global ctx with FileHeader, SavePath, DisableOverwrite
This commit is contained in:
@@ -39,8 +39,6 @@ const (
|
||||
CancelFuncCtx
|
||||
// ValidateCapacityOnceCtx 限定归还容量的操作只執行一次
|
||||
ValidateCapacityOnceCtx
|
||||
// 禁止上传时同名覆盖操作
|
||||
DisableOverwrite
|
||||
// 文件在从机节点中的路径
|
||||
SlaveSrcPath
|
||||
)
|
||||
|
||||
87
pkg/filesystem/fsctx/stream.go
Normal file
87
pkg/filesystem/fsctx/stream.go
Normal file
@@ -0,0 +1,87 @@
|
||||
package fsctx
|
||||
|
||||
import (
|
||||
"io"
|
||||
"time"
|
||||
)
|
||||
|
||||
type WriteMode int
|
||||
|
||||
const (
|
||||
Overwrite WriteMode = iota
|
||||
Append
|
||||
Create
|
||||
)
|
||||
|
||||
// FileStream 用户传来的文件
|
||||
type FileStream struct {
|
||||
Mode WriteMode
|
||||
Hidden bool
|
||||
LastModified time.Time
|
||||
Metadata map[string]string
|
||||
File io.ReadCloser
|
||||
Size uint64
|
||||
VirtualPath string
|
||||
Name string
|
||||
MIMEType string
|
||||
SavePath string
|
||||
}
|
||||
|
||||
func (file *FileStream) Read(p []byte) (n int, err error) {
|
||||
return file.File.Read(p)
|
||||
}
|
||||
|
||||
func (file *FileStream) GetMIMEType() string {
|
||||
return file.MIMEType
|
||||
}
|
||||
|
||||
func (file *FileStream) GetSize() uint64 {
|
||||
return file.Size
|
||||
}
|
||||
|
||||
func (file *FileStream) Close() error {
|
||||
return file.File.Close()
|
||||
}
|
||||
|
||||
func (file *FileStream) GetFileName() string {
|
||||
return file.Name
|
||||
}
|
||||
|
||||
func (file *FileStream) GetVirtualPath() string {
|
||||
return file.VirtualPath
|
||||
}
|
||||
|
||||
func (file *FileStream) GetMode() WriteMode {
|
||||
return file.Mode
|
||||
}
|
||||
|
||||
func (file *FileStream) GetMetadata() map[string]string {
|
||||
return file.Metadata
|
||||
}
|
||||
|
||||
func (file *FileStream) GetLastModified() time.Time {
|
||||
return file.LastModified
|
||||
}
|
||||
|
||||
func (file *FileStream) IsHidden() bool {
|
||||
return file.Hidden
|
||||
}
|
||||
|
||||
func (file *FileStream) GetSavePath() string {
|
||||
return file.SavePath
|
||||
}
|
||||
|
||||
// FileHeader 上传来的文件数据处理器
|
||||
type FileHeader interface {
|
||||
io.Reader
|
||||
io.Closer
|
||||
GetSize() uint64
|
||||
GetMIMEType() string
|
||||
GetFileName() string
|
||||
GetVirtualPath() string
|
||||
GetMode() WriteMode
|
||||
GetMetadata() map[string]string
|
||||
GetLastModified() time.Time
|
||||
IsHidden() bool
|
||||
GetSavePath() string
|
||||
}
|
||||
48
pkg/filesystem/fsctx/stream_test.go
Normal file
48
pkg/filesystem/fsctx/stream_test.go
Normal file
@@ -0,0 +1,48 @@
|
||||
package fsctx
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"io/ioutil"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestFileStream_GetFileName(t *testing.T) {
|
||||
asserts := assert.New(t)
|
||||
file := FileStream{Name: "123"}
|
||||
asserts.Equal("123", file.GetFileName())
|
||||
}
|
||||
|
||||
func TestFileStream_GetMIMEType(t *testing.T) {
|
||||
asserts := assert.New(t)
|
||||
file := FileStream{MIMEType: "123"}
|
||||
asserts.Equal("123", file.GetMIMEType())
|
||||
}
|
||||
|
||||
func TestFileStream_GetSize(t *testing.T) {
|
||||
asserts := assert.New(t)
|
||||
file := FileStream{Size: 123}
|
||||
asserts.Equal(uint64(123), file.GetSize())
|
||||
}
|
||||
|
||||
func TestFileStream_Read(t *testing.T) {
|
||||
asserts := assert.New(t)
|
||||
file := FileStream{
|
||||
File: ioutil.NopCloser(strings.NewReader("123")),
|
||||
}
|
||||
var p = make([]byte, 3)
|
||||
{
|
||||
n, err := file.Read(p)
|
||||
asserts.Equal(3, n)
|
||||
asserts.NoError(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFileStream_Close(t *testing.T) {
|
||||
asserts := assert.New(t)
|
||||
file := FileStream{
|
||||
File: ioutil.NopCloser(strings.NewReader("123")),
|
||||
}
|
||||
err := file.Close()
|
||||
asserts.NoError(err)
|
||||
}
|
||||
Reference in New Issue
Block a user