@@ -41,7 +41,12 @@ func (c *ApiController) GetStore() { | |||
return | |||
} | |||
store.Populate() | |||
err = store.Populate() | |||
if err != nil { | |||
c.ResponseError(err.Error()) | |||
return | |||
} | |||
c.ResponseOk(store) | |||
} | |||
@@ -37,7 +37,12 @@ func addRecord(c *ApiController, userName string, requestUri string) { | |||
record.RequestUri = requestUri | |||
} | |||
util.SafeGoroutine(func() { casdoorsdk.AddRecord(record) }) | |||
util.SafeGoroutine(func() { | |||
_, err := casdoorsdk.AddRecord(record) | |||
if err != nil { | |||
panic(err) | |||
} | |||
}) | |||
} | |||
func addRecordForFile(c *ApiController, userName string, action string, storeId string, key string, filename string, isLeaf bool) { | |||
@@ -38,7 +38,12 @@ func (c *ApiController) GetVideo() { | |||
id := c.Input().Get("id") | |||
video, err := object.GetVideo(id) | |||
video.Populate() | |||
if err != nil { | |||
c.ResponseError(err.Error()) | |||
return | |||
} | |||
err = video.Populate() | |||
if err != nil { | |||
c.ResponseError(err.Error()) | |||
return | |||
@@ -161,7 +166,12 @@ func (c *ApiController) UploadVideo() { | |||
Labels: []*object.Label{}, | |||
DataUrls: []string{}, | |||
} | |||
object.AddVideo(video) | |||
_, err = object.AddVideo(video) | |||
if err != nil { | |||
c.ResponseError(err.Error()) | |||
return | |||
} | |||
c.ResponseOk(fileId) | |||
} else { | |||
c.ResponseError("videoId is empty") | |||
@@ -33,15 +33,24 @@ func AddFile(storeId string, key string, isLeaf bool, filename string, file mult | |||
if err != nil { | |||
return false, nil, err | |||
} | |||
bs := fileBuffer.Bytes() | |||
storage.PutObject(store.Bucket, objectKey, fileBuffer) | |||
err = storage.PutObject(store.Bucket, objectKey, fileBuffer) | |||
if err != nil { | |||
return false, nil, err | |||
} | |||
return true, bs, nil | |||
} else { | |||
objectKey = fmt.Sprintf("%s/%s/_hidden.ini", key, filename) | |||
objectKey = strings.TrimLeft(objectKey, "/") | |||
fileBuffer = bytes.NewBuffer(nil) | |||
bs := fileBuffer.Bytes() | |||
storage.PutObject(store.Bucket, objectKey, fileBuffer) | |||
err = storage.PutObject(store.Bucket, objectKey, fileBuffer) | |||
if err != nil { | |||
return false, nil, err | |||
} | |||
return true, bs, nil | |||
} | |||
} | |||
@@ -56,11 +65,21 @@ func DeleteFile(storeId string, key string, isLeaf bool) (bool, error) { | |||
} | |||
if isLeaf { | |||
storage.DeleteObject(store.Bucket, key) | |||
err = storage.DeleteObject(store.Bucket, key) | |||
if err != nil { | |||
return false, err | |||
} | |||
} else { | |||
objects := storage.ListObjects(store.Bucket, key) | |||
objects, err := storage.ListObjects(store.Bucket, key) | |||
if err != nil { | |||
return false, err | |||
} | |||
for _, object := range objects { | |||
storage.DeleteObject(store.Bucket, object.Key) | |||
err = storage.DeleteObject(store.Bucket, object.Key) | |||
if err != nil { | |||
return false, err | |||
} | |||
} | |||
} | |||
return true, nil | |||
@@ -66,8 +66,11 @@ func isObjectLeaf(object *oss.ObjectProperties) bool { | |||
return isLeaf | |||
} | |||
func (store *Store) Populate() { | |||
objects := storage.ListObjects(store.Bucket, "") | |||
func (store *Store) Populate() error { | |||
objects, err := storage.ListObjects(store.Bucket, "") | |||
if err != nil { | |||
return err | |||
} | |||
if store.FileTree == nil { | |||
store.FileTree = &File{ | |||
@@ -102,10 +105,15 @@ func (store *Store) Populate() { | |||
//fmt.Printf("%s, %d, %v\n", object.Key, object.Size, object.LastModified) | |||
} | |||
return nil | |||
} | |||
func (store *Store) GetVideoData() []string { | |||
objects := storage.ListObjects(store.Bucket, "2023/视频附件") | |||
func (store *Store) GetVideoData() ([]string, error) { | |||
objects, err := storage.ListObjects(store.Bucket, "2023/视频附件") | |||
if err != nil { | |||
return nil, err | |||
} | |||
res := []string{} | |||
for _, object := range objects { | |||
@@ -117,5 +125,5 @@ func (store *Store) GetVideoData() []string { | |||
res = append(res, url) | |||
} | |||
return res | |||
return res, nil | |||
} |
@@ -5,7 +5,18 @@ import "testing" | |||
func TestUpdateStoreFolders(t *testing.T) { | |||
InitConfig() | |||
store, _ := getStore("admin", "default") | |||
//store.Populate() | |||
store.GetVideoData() | |||
store, err := getStore("admin", "default") | |||
if err != nil { | |||
panic(err) | |||
} | |||
//err = store.Populate() | |||
//if err != nil { | |||
// panic(err) | |||
//} | |||
_, err = store.GetVideoData() | |||
if err != nil { | |||
panic(err) | |||
} | |||
} |
@@ -114,7 +114,13 @@ func (video *Video) GetId() string { | |||
return fmt.Sprintf("%s/%s", video.Owner, video.Name) | |||
} | |||
func (video *Video) Populate() { | |||
func (video *Video) Populate() error { | |||
store, _ := getStore("admin", "default") | |||
video.DataUrls = store.GetVideoData() | |||
dataUrls, err := store.GetVideoData() | |||
if err != nil { | |||
return err | |||
} | |||
video.DataUrls = dataUrls | |||
return nil | |||
} |
@@ -7,7 +7,7 @@ import ( | |||
"github.com/aliyun/aliyun-oss-go-sdk/oss" | |||
) | |||
func getBucket(bucketName string) *oss.Bucket { | |||
func getBucket(bucketName string) (*oss.Bucket, error) { | |||
client, err := oss.New(endpoint, clientId, clientSecret) | |||
if err != nil { | |||
panic(err) | |||
@@ -15,28 +15,29 @@ func getBucket(bucketName string) *oss.Bucket { | |||
bucket, err := client.Bucket(bucketName) | |||
if err != nil { | |||
panic(err) | |||
return nil, err | |||
} | |||
return bucket | |||
return bucket, nil | |||
} | |||
func ListObjects(bucketName string, prefix string) []oss.ObjectProperties { | |||
res := []oss.ObjectProperties{} | |||
func ListObjects(bucketName string, prefix string) ([]oss.ObjectProperties, error) { | |||
if bucketName == "" { | |||
return res | |||
return nil, fmt.Errorf("bucket name is empty") | |||
} | |||
bucket := getBucket(bucketName) | |||
bucket, err := getBucket(bucketName) | |||
if err != nil { | |||
return nil, err | |||
} | |||
res := []oss.ObjectProperties{} | |||
marker := oss.Marker("") | |||
i := 0 | |||
for { | |||
resp, err := bucket.ListObjects(oss.Prefix(prefix), oss.MaxKeys(1000), marker) | |||
if err != nil { | |||
fmt.Println(err.Error()) | |||
return res | |||
return nil, err | |||
} | |||
marker = oss.Marker(resp.NextMarker) | |||
@@ -52,23 +53,25 @@ func ListObjects(bucketName string, prefix string) []oss.ObjectProperties { | |||
} | |||
} | |||
return res | |||
return res, nil | |||
} | |||
func PutObject(bucketName string, key string, fileBuffer *bytes.Buffer) { | |||
bucket := getBucket(bucketName) | |||
err := bucket.PutObject(key, fileBuffer) | |||
func PutObject(bucketName string, key string, fileBuffer *bytes.Buffer) error { | |||
bucket, err := getBucket(bucketName) | |||
if err != nil { | |||
panic(err) | |||
return err | |||
} | |||
} | |||
func DeleteObject(bucketName string, key string) { | |||
bucket := getBucket(bucketName) | |||
err = bucket.PutObject(key, fileBuffer) | |||
return err | |||
} | |||
err := bucket.DeleteObject(key) | |||
func DeleteObject(bucketName string, key string) error { | |||
bucket, err := getBucket(bucketName) | |||
if err != nil { | |||
panic(err) | |||
return err | |||
} | |||
err = bucket.DeleteObject(key) | |||
return err | |||
} |
@@ -3,5 +3,8 @@ package storage | |||
import "testing" | |||
func TestStorage(t *testing.T) { | |||
ListObjects("casibase", "") | |||
_, err := ListObjects("casibase", "") | |||
if err != nil { | |||
panic(err) | |||
} | |||
} |