in storage-s3/s3.go [78:117]
func (s *Storage) UploadFile(ctx *plugin.GinContext, condition plugin.UploadFileCondition) (resp plugin.UploadFileResponse) {
resp = plugin.UploadFileResponse{}
file, err := ctx.FormFile("file")
if err != nil {
resp.OriginalError = fmt.Errorf("get upload file failed: %v", err)
resp.DisplayErrorMsg = plugin.MakeTranslator(i18n.ErrFileNotFound)
return resp
}
if s.IsUnsupportedFileType(file.Filename, condition) {
resp.OriginalError = fmt.Errorf("file type not allowed")
resp.DisplayErrorMsg = plugin.MakeTranslator(i18n.ErrUnsupportedFileType)
return resp
}
if s.ExceedFileSizeLimit(file.Size, condition) {
resp.OriginalError = fmt.Errorf("file size too large")
resp.DisplayErrorMsg = plugin.MakeTranslator(i18n.ErrOverFileSizeLimit)
return resp
}
openFile, err := file.Open()
if err != nil {
resp.OriginalError = fmt.Errorf("get file failed: %v", err)
resp.DisplayErrorMsg = plugin.MakeTranslator(i18n.ErrFileNotFound)
return resp
}
defer openFile.Close()
objectKey := s.createObjectKey(file.Filename, condition.Source)
err = s.Client.PutObject(objectKey, strings.ToLower(filepath.Ext(file.Filename)), openFile)
if err != nil {
resp.OriginalError = fmt.Errorf("upload file failed: %v", err)
resp.DisplayErrorMsg = plugin.MakeTranslator(i18n.ErrUploadFileFailed)
return resp
}
resp.FullURL = s.Config.VisitUrlPrefix + objectKey
return resp
}