package fileserver import ( "ehttp/http" "epur-pay/cache" fileConfig "epur-pay/pkg/fileserver/config" "epur-pay/pkg/utils" "fmt" "io" "reflect" ) type File struct { FileName *string Data interface{} DataLen int64 ContentType *string Encryption bool Key string Iv string } func New() { // 根据类型加载存储方式 storeType := utils.GetStoreType(cache.Global.Caches.Config.Get("storeType")) storeJson := cache.Global.Caches.Config.GetMap(fmt.Sprintf("storeJson_%s", storeType)) if storeJson != nil { fileConfig.New(&fileConfig.FileStoreRequest{ AccessKeyId: storeJson["AccessKeyId"].(string), AccessKeySecret: storeJson["AccessKeySecret"].(string), BucketName: storeJson["BucketName"].(string), EndPoint: storeJson["EndPoint"].(string), Access: storeJson["Access"].(string), RegionId: storeJson["regionId"].(string), StoreType: storeType, }) } } // 文件上传 func (f *File) UpLoad() string { filePathResponse := "" f.encryption() filePathResponse = fileConfig.Cf.Store.Api.Put(*f.FileName, "", f.Data) return filePathResponse } // 加密 func (f *File) encryption() { typeOf := reflect.TypeOf(f.Data).Kind() handlerData := make([]byte, f.DataLen+1) //logger.AccessLogger.Infoln("类型:", typeOf) switch typeOf { case reflect.String: handlerData = f.DownLoad(f.Data.(string)) case reflect.Slice: handlerData = f.Data.([]byte) case reflect.Struct: _, err := f.Data.(io.Reader).Read(handlerData) if err != nil { panic(err) } //case reflect.Ptr: // _, err := f.Data.(*os.File).Read(handlerData) // if err != nil { // panic(err) // } default: panic("数据不合法!") } if f.Encryption { f.Data = handlerData //s := aes.Encrypt(handlerData, []byte("PTIU3VR6HdfhziklcFQBXee1lkdpnesr")) //encoded := base64.StdEncoding.EncodeToString(handlerData) //f.ContentType = utils.PString("application/octet-stream") //f.Data = []byte(aesnew.P1(f.Key, f.Iv, base64.StdEncoding.EncodeToString(handlerData))) } else { f.Data = handlerData } } // 文件下载 func (f *File) DownLoad(url string) []byte { r := http.New( http.WithUrl(url), http.WithMethod(http.GET), ) if err := r.Do(); err != nil { panic(err.Error()) } return r.Result } // 文件解密 func (f *File) DecryptFromUrl(url string) string { result := f.DownLoad(url) return string(result) //return aesnew.P2(f.Key, f.Iv, string(result)) } func (f *File) SetKeyIv(key, iv string) { f.Key = key f.Iv = iv } //func GetImageKeyIv(uid int64) (string, string) { // return kk.KK2(fmt.Sprintf("%d", uid), 6), kk.KK2(fmt.Sprintf("%d", uid), 10) //}