123 lines
2.6 KiB
Go
123 lines
2.6 KiB
Go
package go_aliyun_oss
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"github.com/google/uuid"
|
|
"io/ioutil"
|
|
"mime/multipart"
|
|
"os"
|
|
"path/filepath"
|
|
"reflect"
|
|
"strings"
|
|
)
|
|
|
|
type OssFile struct {
|
|
FileByte []byte
|
|
FileOldName string
|
|
FileNewName string
|
|
FileType string
|
|
File interface{}
|
|
}
|
|
|
|
type OssFileInterface interface {
|
|
FileTypeTransForm() (*OssFile, error)
|
|
GetFileType() *OssFile
|
|
}
|
|
|
|
// FileTypeTransForm file type transform
|
|
// @title 文件类型转换
|
|
func (ossFile *OssFile) FileTypeTransForm() (*OssFile, error) {
|
|
var err error
|
|
|
|
switch ossFile.File.(type) {
|
|
case *os.File:
|
|
|
|
ossFile.FileByte, err = ioutil.ReadAll(ossFile.File.(*os.File))
|
|
|
|
if err != nil {
|
|
return nil, errors.New("read os type file failed:" + err.Error())
|
|
}
|
|
|
|
_, ossFile.FileOldName = filepath.Split(ossFile.File.(*os.File).Name())
|
|
|
|
break
|
|
|
|
case *multipart.FileHeader:
|
|
|
|
fileResources, err := ossFile.File.(*multipart.FileHeader).Open()
|
|
|
|
if err != nil {
|
|
panic("open multipart file failed:" + err.Error())
|
|
}
|
|
|
|
defer fileResources.Close()
|
|
|
|
ossFile.FileByte, err = ioutil.ReadAll(fileResources)
|
|
|
|
if err != nil {
|
|
return nil, errors.New("read multipart file failed:" + err.Error())
|
|
}
|
|
|
|
ossFile.FileOldName = ossFile.File.(*multipart.FileHeader).Filename
|
|
|
|
break
|
|
|
|
case string:
|
|
newFile, err := os.Open(ossFile.File.(string))
|
|
|
|
if err != nil {
|
|
return nil, errors.New("open file path failed:" + err.Error())
|
|
}
|
|
|
|
defer newFile.Close()
|
|
|
|
ossFile.FileByte, err = ioutil.ReadAll(newFile)
|
|
|
|
_, ossFile.FileOldName = filepath.Split(newFile.Name())
|
|
|
|
break
|
|
|
|
// 支持[]byte数组传递 因为无法解析文件类型 默认直接给出文件类型为.png
|
|
case []byte:
|
|
ossFile.FileByte = ossFile.File.([]byte)
|
|
|
|
//判断是否指定了文件的类型 如果没有指定默认为png格式
|
|
if ossFile.FileType == "" || len(ossFile.FileType) <= 0 {
|
|
ossFile.FileOldName = uuid.NewString() + ".png"
|
|
} else {
|
|
ossFile.FileOldName = uuid.NewString() + ossFile.FileType
|
|
}
|
|
|
|
break
|
|
|
|
default:
|
|
fmt.Println(reflect.TypeOf(ossFile.File))
|
|
return nil, errors.New("file type is not support")
|
|
}
|
|
|
|
ossFile.GetFileType()
|
|
|
|
return ossFile, nil
|
|
}
|
|
|
|
// GetFileType split file type and generate file name
|
|
// 截取文件类型
|
|
func (ossFile *OssFile) GetFileType() *OssFile {
|
|
|
|
// 当没有传递文件类型时去文件名中截取出文件类型
|
|
if ossFile.FileType == "" || len(ossFile.FileType) <= 0 {
|
|
//from oldFileName split file type
|
|
fileTypeSufIndex := strings.Index(ossFile.FileOldName, ".")
|
|
|
|
fileType := ossFile.FileOldName[fileTypeSufIndex:]
|
|
|
|
ossFile.FileType = fileType
|
|
}
|
|
|
|
//generate only file name
|
|
ossFile.FileNewName = uuid.NewString() + ossFile.FileType
|
|
|
|
return ossFile
|
|
}
|