Browse Source

Add DeleteFile()

HEAD
Yang Luo 3 years ago
parent
commit
1c0cbdf177
6 changed files with 147 additions and 5 deletions
  1. +47
    -0
      controllers/file.go
  2. +26
    -0
      object/file.go
  3. +4
    -0
      routers/router.go
  4. +16
    -1
      storage/aliyun.go
  5. +26
    -4
      web/src/FileTree.js
  6. +28
    -0
      web/src/backend/FileBackend.js

+ 47
- 0
controllers/file.go View File

@@ -0,0 +1,47 @@
package controllers

import (
"encoding/json"

"github.com/casbin/casbase/object"
)

func (c *ApiController) UpdateFile() {
storeId := c.Input().Get("store")
key := c.Input().Get("key")

var file object.File
err := json.Unmarshal(c.Ctx.Input.RequestBody, &file)
if err != nil {
panic(err)
}

c.Data["json"] = object.UpdateFile(storeId, key, &file)
c.ServeJSON()
}

func (c *ApiController) AddFile() {
storeId := c.Input().Get("store")

var file object.File
err := json.Unmarshal(c.Ctx.Input.RequestBody, &file)
if err != nil {
panic(err)
}

c.Data["json"] = object.AddFile(storeId, &file)
c.ServeJSON()
}

func (c *ApiController) DeleteFile() {
storeId := c.Input().Get("store")

var file object.File
err := json.Unmarshal(c.Ctx.Input.RequestBody, &file)
if err != nil {
panic(err)
}

c.Data["json"] = object.DeleteFile(storeId, &file)
c.ServeJSON()
}

+ 26
- 0
object/file.go View File

@@ -0,0 +1,26 @@
package object

import "github.com/casbin/casbase/storage"

func UpdateFile(storeId string, key string, file *File) bool {
return true
}

func AddFile(storeId string, file *File) bool {
affected, err := adapter.engine.Insert(file)
if err != nil {
panic(err)
}

return affected != 0
}

func DeleteFile(storeId string, file *File) bool {
store := GetStore(storeId)
if store == nil {
return false
}

storage.DeleteObject(store.Bucket, file.Key)
return true
}

+ 4
- 0
routers/router.go View File

@@ -51,4 +51,8 @@ func initAPI() {
beego.Router("/api/update-store", &controllers.ApiController{}, "POST:UpdateStore")
beego.Router("/api/add-store", &controllers.ApiController{}, "POST:AddStore")
beego.Router("/api/delete-store", &controllers.ApiController{}, "POST:DeleteStore")

beego.Router("/api/update-file", &controllers.ApiController{}, "POST:UpdateFile")
beego.Router("/api/add-file", &controllers.ApiController{}, "POST:AddFile")
beego.Router("/api/delete-file", &controllers.ApiController{}, "POST:DeleteFile")
}

+ 16
- 1
storage/aliyun.go View File

@@ -2,7 +2,7 @@ package storage

import "github.com/aliyun/aliyun-oss-go-sdk/oss"

func ListObjects(bucketName string) []oss.ObjectProperties {
func getBucket(bucketName string) *oss.Bucket {
client, err := oss.New(endpoint, clientId, clientSecret)
if err != nil {
panic(err)
@@ -13,6 +13,12 @@ func ListObjects(bucketName string) []oss.ObjectProperties {
panic(err)
}

return bucket
}

func ListObjects(bucketName string) []oss.ObjectProperties {
bucket := getBucket(bucketName)

res := []oss.ObjectProperties{}
marker := oss.Marker("")
i := 0
@@ -37,3 +43,12 @@ func ListObjects(bucketName string) []oss.ObjectProperties {

return res
}

func DeleteObject(bucketName string, key string) {
bucket := getBucket(bucketName)

err := bucket.DeleteObject(key)
if err != nil {
panic(err)
}
}

+ 26
- 4
web/src/FileTree.js View File

@@ -1,9 +1,10 @@
import React from "react";
import {Button, Col, Empty, Row, Spin, Tooltip, Tree} from 'antd';
import {CloudUploadOutlined, createFromIconfontCN, DeleteOutlined, EditOutlined, FolderAddOutlined, RadiusSettingOutlined} from "@ant-design/icons";
import FileViewer from 'react-file-viewer';
import * as Setting from "./Setting";
import * as FileBackend from "./backend/FileBackend";
import DocViewer, { DocViewerRenderers } from "react-doc-viewer";
import FileViewer from 'react-file-viewer';

import {Controlled as CodeMirror} from "react-codemirror2";
import "codemirror/lib/codemirror.css";
@@ -76,6 +77,18 @@ class FileTree extends React.Component {
}
}

deleteFile(file) {
FileBackend.deleteFile(`${this.props.store.owner}/${this.props.store.name}`, file)
.then((res) => {
Setting.showMessage("success", `File deleted successfully`);
window.location.reload();
}
)
.catch(error => {
Setting.showMessage("error", `File failed to delete: ${error}`);
});
}

renderTree(store) {
const onDragEnter = (info) => {
// console.log(info); // expandedKeys 需要受控时设置
@@ -204,13 +217,22 @@ class FileTree extends React.Component {
<Tooltip color={"rgb(255,255,255,0.8)"} placement="right" title={
<div>
<Tooltip title={i18next.t("store:Rename")}>
<Button style={{marginRight: "5px"}} icon={<EditOutlined />} size="small" onClick={(e) => {Setting.showMessage("error", "Rename");e.stopPropagation()}} />
<Button style={{marginRight: "5px"}} icon={<EditOutlined />} size="small" onClick={(e) => {
Setting.showMessage("error", "Rename");
e.stopPropagation();
}} />
</Tooltip>
<Tooltip title={i18next.t("store:Move")}>
<Button style={{marginRight: "5px"}} icon={<RadiusSettingOutlined />} size="small" onClick={(e) => {Setting.showMessage("error", "Move");e.stopPropagation()}} />
<Button style={{marginRight: "5px"}} icon={<RadiusSettingOutlined />} size="small" onClick={(e) => {
Setting.showMessage("error", "Move");
e.stopPropagation();
}} />
</Tooltip>
<Tooltip title={i18next.t("store:Delete")}>
<Button icon={<DeleteOutlined />} size="small" onClick={(e) => {Setting.showMessage("error", "Delete");e.stopPropagation()}} />
<Button icon={<DeleteOutlined />} size="small" onClick={(e) => {
this.deleteFile(file);
e.stopPropagation();
}} />
</Tooltip>
</div>
}>


+ 28
- 0
web/src/backend/FileBackend.js View File

@@ -0,0 +1,28 @@
import * as Setting from "../Setting";
export function updateFile(storeName, name, file) {
let newFile = Setting.deepCopy(file);
return fetch(`${Setting.ServerUrl}/api/update-file?store=${storeName}&name=${name}`, {
method: 'POST',
credentials: 'include',
body: JSON.stringify(newFile),
}).then(res => res.json());
}
export function addFile(storeName, file) {
let newFile = Setting.deepCopy(file);
return fetch(`${Setting.ServerUrl}/api/add-file?store=${storeName}`, {
method: 'POST',
credentials: 'include',
body: JSON.stringify(newFile),
}).then(res => res.json());
}
export function deleteFile(storeName, file) {
let newFile = Setting.deepCopy(file);
return fetch(`${Setting.ServerUrl}/api/delete-file?store=${storeName}`, {
method: 'POST',
credentials: 'include',
body: JSON.stringify(newFile),
}).then(res => res.json());
}

Loading…
Cancel
Save