删除错误提交

master
dfz 2 weeks ago
parent ec37768f0b
commit 80b405d64c

@ -1,378 +0,0 @@
### 验证码
无需校验参数
##### 获取验证码
> <font color=#FF4500>*GET*/captcha </font>
> 返回示例:
```json
{
"code": 200,
"data": {
"id": "ECAZBGqD6ORferpWPx9y",
"img_url": "/captcha/ECAZBGqD6ORferpWPx9y.png",// 验证码图片地址
"refresh": "/captcha/ECAZBGqD6ORferpWPx9y.png?reload=1",
"verify": "/captcha/ECAZBGqD6ORferpWPx9y/这里替换为正确的验证码进行验证"
},
"msg": "验证码信息"
}
```
#### 验证验证码
> <font color=#FF4500>*GET*/captcha/:captcha_id/:captcha_value </font>
> 返回示例:
```json
{
"code": 200,
"data": "",
"msg": "验证码校验通过"
}
```
## 用户相关
### 无需鉴权
#### 获取公钥
> <font color=#FF4500>*POST*/admin/users/publickey </font>
参数字段|参数属性|类型|选项
---|---|---|---|---
user_name|form-data|string|必填
> 返回示例:
```
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw/GsJEfppPkaZXGt7uKr
q2UOsCEzrtPYz/DDUCjJzWnr725FoNqT77B33QbET995hay8j8Bcwwj7APkUYKyt
RoNUOJkaWgAqpNp9/TKhulFex8ycEaI1lG0kzqPQtcNjIQyqOQ1qSyXb8BxFFN5+
zvuWdpb4lI8YxZGg9+n77qtmr2an7d4ADIsRVAejJuoDWB56RovVuiLihG71Wfam
V1HhGf0ykWfyamd1HxN74hdBICbpChWPCmD/S2MwBMViM+TfCu5D15DxP5ZkADLU
vV81YIKBLg6KZUV7N7oZzzJqiEmpeis4QO4ABf/KRQ9KVRe4dcJFi4E0uVCBKGm8
1QIDAQAB
-----END PUBLIC KEY-----
```
> 加密参考 */test/login_test.html*
> 用户发送密码必须通过加密,否则会产生错误
```javascript
const response = await fetch('http://localhost:14514/admin/users/publickey?user_name=joefalmko',{
method: 'POST',
});
const publicKey = await response.text();
console.log("public key:\n",publicKey);
// Encrypt the password using the public key
const encrypt = new JSEncrypt();
encrypt.setPublicKey(publicKey);
const encryptedPassword = encrypt.encrypt(password);
console.log("encrypted password: ",encryptedPassword);
```
#### 用户注册
> <font color=#FF4500>*POST*/admin/users/register </font>
参数字段|参数属性|类型|选项
---|---|---|---|---
user_name|form-data|string|必填
pass|form-data|string|必填
> 返回示例:
```json
{
"code": 200,
"data": "",
"msg": "Success"
}
```
#### 用户登录
> <font color=#FF4500>*POST*/admin/users/login </font>
参数字段|参数属性|类型|选项
---|---|---|---|---
user_name|form-data|string|必填
pass|form-data|string|必填
> 返回示例:
```json
{
"code": 200,
"data": {
"userId":5
"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo1LCJ1c2VyX25hbWUiOiJqb2VmYWxta28iLCJwaG9uZSI6IiIsImV4cCI6MTczMDA1OTQxMSwibmJmIjoxNzMwMDMwNjAxfQ.tqxCyPGQYPpTUJBoqZ47sfCAdxEN2thKRBPHilWHl18",
"updated_at":"2024-10-27 20:03:31",
"msg": "Success"
}
}
```
### 需要鉴权
Header中必须包含 "Authorization": "Bearer {token}"
#### 获取用户信息
> <font color=#FF4500>*POST*/admin/users/info </font>
参数字段|参数属性|类型|选项
---|---|---|---|---
user_name|form-data|string|必填
> 返回示例:
```json
{
"code": 200,
"data": {
"id": 1,
"user_name": "joefalmko",
},
"msg": "Success"
}
```
#### 更新用户名
> <font color=#FF4500>*POST*/admin/users/username </font>
参数字段|参数属性|类型|选项
---|---|---|---|---
user_name|form-data|string|必填
id|form-data|int|必填
> 返回示例:
```json
{
"code": 200,
"data": "",
"msg": "Success"
}
```
#### 更新密码
> <font color=#FF4500>*POST*/admin/users/password </font>
参数字段|参数属性|类型|选项
---|---|---|---|---
user_name|form-data|string|必填
id|form-data|int|必填
oldpass|form-data|string|必填
newpass|form-data|string|必填
> 返回示例:
```json
{
"code": 200,
"data": "",
"msg": "Success"
}
```
#### 注销用户
> <font color=#FF4500>*POST*/admin/users/delete </font>
参数字段|参数属性|类型|选项
---|---|---|---|---
user_name|form-data|string|必填
id|form-data|int|必填
pass|form-data|string|必填
> 返回示例:
```json
{
"code": 200,
"data": "",
"msg": "Success"
}
```
#### 登出用户
> <font color=#FF4500>*POST*/admin/users/logout </font>
参数字段|参数属性|类型|选项
---|---|---|---|---
id|form-data|int|必填
> 返回示例:
```json
{
"code": 200,
"data": "",
"msg": "Success"
}
```
#### token刷新 请将旧token放置在header头参数直接提交更新
> <font color=#FF4500>*post*/admin/users/refreshtoken</font>
参数字段|参数属性|类型|选项|默认值
---|---|---|---|---
Authorization|Headers|string|必填|Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOjQ3LCJ1c2VyX25hbWUiOiJnb3NrZWxldG9uMS40IiwicGhvbmUiOiIiLCJleHAiOjE2MDQwNTIxNzMsIm5iZiI6MTYwNDA0ODU2M30.YNhN9_QasHc5XILQiilZvhxpPDnmC_j82y4JfYPnI7A
> 返回示例:
```json
{
"code": 200,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOjQ3LCJ1c2VyX25hbWUiOiJnb3NrZWxldG9uMS40IiwicGhvbmUiOiIiLCJleHAiOjE2MDQwNTYxMDcsIm5iZiI6MTYwNDA0ODU2M30.JPE6G-9YE9UTdxHiWuvdVlD-akiIkvp6Ezf9y4_ud9M"
},
"msg": "Success"
}
```
#### 请求图片文字识别
> <font color=#FF4500>*post*/admin/ai_recognition/pic_recognition</font>
参数字段|参数属性|类型|选项|默认值
---|---|---|---|---
pic|form-data|string|必填|"" (示例内容在 storage/app/test/文字识别.txt 中)
> 返回示例:
```json
{
"code": 200,
"data": {
"words": "out[entry]=\nfor each basic block ∈N -{entry}\nout[B] =\nchange = true\nwhile (changes) {\n// Find: fix point solution\nchange = false\nfor each B∈N - {entry} {\noldout = out[B]\nin[B]= Uout[P]\nP∈pred[B]\nout[B] = GEN[B] (in[B]∩ PRSV[B])\nif(out[B] ≠ oldout) change = true;\n}\n}\n"
},
"msg": "Success"
}
```
#### 请求语音识别
> <font color=#FF4500>*post*/admin/ai_recognition/voc_recognition</font>
参数字段|参数属性|类型|选项|默认值
---|---|---|---|---
voc|form-data|string|必填|"" (示例内容在 storage/app/test/A13_221.txt 中)
> 返回示例:
```json
{
"code": 200,
"data": {
"words": "韩国的基本目标是射箭三块金牌只到三块金牌羽毛球两块金牌以及举重等12块金牌。\n"
},
"msg": "Success"
}
```
#### 请求文本优化
> <font color=#FF4500>*post*/admin/ai_doc/doc_refine</font>
参数字段|参数属性|类型|选项|默认值
---|---|---|---|---
doc|form-data|string|必填|""
background|form-data|string||""
type|form-data|string|必填|"abstract"/"decorate"/"sequel_writing"/"rewrite_wrong"/"translate"
> 返回示例:
```json
{
"code": 200,
"data": {
"new_doc": "Whether it's a business report, an academic paper, or a creative piece of writing, this module can polish the language, correct grammar and spelling errors, and optimize the overall structure."
},
"msg": "Success"
}
```
#### 创建文件
> <font color=#FF4500>*post*/admin/file/file_creat</font>
参数字段|参数属性|类型|选项
---|---|---|---|---
user_name|form-data|string|必填
file_name|form-data|string|必填
file_path|form-data|string|必填
> 返回示例:
```json
{
{
"code": 200,
"data": "文件创建成功",
"msg": "Success"
}
}
```
#### 创建文件夹
> <font color=#FF4500>*post*/admin/file/folder_creat</font>
参数字段|参数属性|类型|选项
---|---|---|---|---
user_name|form-data|string|必填
folder_name|form-data|string|必填
folder_path|form-data|string|必填
> 返回示例:
```json
{
{
"code": 200,
"data": "文件夹创建成功",
"msg": "Success"
}
}
```
#### 打开文件
> <font color=#FF4500>*post*/admin/file/file_get</font>
参数字段|参数属性|类型|选项
---|---|---|---|---
user_name|form-data|string|必填
file_name|form-data|string|必填
file_path|form-data|string|必填
> 返回示例:
```json
{
{
"code": 200,
"data": "文件获取成功",
"msg": "Success"
}
}
```
#### 文件重命名
> <font color=#FF4500>*post*/admin/file/file_rename</font>
参数字段|参数属性|类型|选项
---|---|---|---|---
user_name|form-data|string|必填
file_name|form-data|string|必填
file_path|form-data|string|必填
newname|form-data|string|必填
> 返回示例:
```json
{
{
"code": 200,
"data": "文件重命名成功",
"msg": "Success"
}
}
```
#### 移动文件
> <font color=#FF4500>*post*/admin/file/file_move</font>
参数字段|参数属性|类型|选项
---|---|---|---|---
user_name|form-data|string|必填
file_name|form-data|string|必填
file_path|form-data|string|必填
newpath|form-data|string|必填
> 返回示例:
```json
{
{
"code": 200,
"data": "文件移动成功",
"msg": "Success"
}
}
```
#### 保存文件
> <font color=#FF4500>*post*/admin/file/file_save</font>
参数字段|参数属性|类型|选项
---|---|---|---|---
user_name|form-data|string|必填
file_name|form-data|string|必填
save_path|form-data|string|必填
file_data|form-data|string|必填
> 返回示例:
```json
{
{
"code": 200,
"data": "文件保存成功",
"msg": "Success"
}
}
```
#### 删除文件
> <font color=#FF4500>*post*/admin/file/file_delete </font>
参数字段|参数属性|类型|选项
---|---|---|---|---
user_name|form-data|string|必填
file_name|form-data|string|必填
file_path|form-data|string|必填
> 返回示例:
```json
{
{
"code": 200,
"data": "文件删除成功",
"msg": "Success"
}
}
```

@ -1,209 +0,0 @@
package web
import (
"fmt"
"goskeleton/app/global/consts"
"goskeleton/app/service/file"
"goskeleton/app/utils/response"
"os"
"github.com/gin-gonic/gin"
)
type File struct {
}
// 创建文件
func (f *File) Creat(context *gin.Context) {
//从context获得路径和文件名并拼接获得最终文件路径
user_name := context.GetString(consts.ValidatorPrefix + "user_name")
file_Path := context.GetString(consts.ValidatorPrefix + "file_path")
file_Name := context.GetString(consts.ValidatorPrefix + "file_name")
final_Path := fmt.Sprintf("%s/%s.docx", file_Path, file_Name)
//file, err := os.Create(final_Path)
if err := file.CreateFile(user_name, final_Path); err != nil {
response.Fail(context, consts.CurdCreatFailCode, consts.CurdCreatFailMsg, err.Error())
return
}
// 文件创建成功,返回成功响应给客户端
response.Success(context, consts.CurdStatusOkMsg, "文件创建成功")
}
// 创建文件夹
func (f *File) FolderCreat(context *gin.Context) {
//从context获得路径和文件夹名并拼接获得最终文件夹路径
user_name := context.GetString(consts.ValidatorPrefix + "user_name")
folder_Path := context.GetString(consts.ValidatorPrefix + "folder_path")
folder_Name := context.GetString(consts.ValidatorPrefix + "folder_name")
final_Path := fmt.Sprintf("%s/%s", folder_Path, folder_Name)
if err := file.CreateFolder(user_name, final_Path); err != nil {
response.Fail(context, consts.CurdCreatFailCode, consts.CurdCreatFailMsg, err.Error())
return
}
// 文件创建成功,返回成功响应给客户端
response.Success(context, consts.CurdStatusOkMsg, "文件夹创建成功")
}
// 打开文件
func (f *File) Get(context *gin.Context) {
//从context获得路径和文件名并拼接获得最终文件路径
user_name := context.GetString(consts.ValidatorPrefix + "user_name")
file_Path := context.GetString(consts.ValidatorPrefix + "file_path")
file_Name := context.GetString(consts.ValidatorPrefix + "file_name")
final_Path := fmt.Sprintf("%s/%s.docx", file_Path, file_Name)
fileObj, err := file.GetFile(user_name, final_Path)
if err != nil {
// 根据不同的错误类型,返回更具体、合适的错误响应给客户端
switch err := err.(type) {
case *os.PathError:
//文件路径错误
response.Fail(context, consts.CurdFilePathErrorCode, consts.CurdFilePathErrorMsg, err.Error())
default:
if err == os.ErrNotExist {
//文件不存在错误
response.Fail(context, consts.CurdFileNotExistCode, consts.CurdFileNotExistMsg, err.Error())
}
}
return
}
defer fileObj.Close() // 确保文件使用完后被关闭
// 文件获取成功,返回成功响应给客户端
response.Success(context, consts.CurdStatusOkMsg, "文件获取成功")
}
// 文件重命名
func (f *File) Rename(context *gin.Context) {
//从context获得路径和文件名并拼接获得最终文件路径
user_name := context.GetString(consts.ValidatorPrefix + "user_name")
file_Path := context.GetString(consts.ValidatorPrefix + "file_path")
file_Name := context.GetString(consts.ValidatorPrefix + "file_name")
final_Path := fmt.Sprintf("%s/%s.docx", file_Path, file_Name)
//old_Name := context.GetString(consts.ValidatorPrefix + "oldname")
new_Name := context.GetString(consts.ValidatorPrefix + "newname")
new_finalpath := fmt.Sprintf("%s/%s.docx", file_Path, new_Name)
err := file.FileRename(user_name, final_Path, new_finalpath)
if err != nil {
// 根据不同的错误类型,返回更具体、合适的错误响应给客户端
switch err := err.(type) {
case *os.PathError:
//文件路径错误
response.Fail(context, consts.CurdFilePathErrorCode, consts.CurdFilePathErrorMsg, err.Error())
default:
if err == os.ErrNotExist {
//文件不存在错误
response.Fail(context, consts.CurdFileNotExistCode, consts.CurdFileNotExistMsg, err.Error())
}
}
return
}
// 文件重命名成功,返回成功响应给客户端
response.Success(context, consts.CurdStatusOkMsg, "文件重命名成功")
}
// 文件移动
func (f *File) Move(context *gin.Context) {
//从context获得路径和文件名并拼接获得最终文件路径
user_name := context.GetString(consts.ValidatorPrefix + "user_name")
file_Path := context.GetString(consts.ValidatorPrefix + "file_path")
file_Name := context.GetString(consts.ValidatorPrefix + "file_name")
final_Path := fmt.Sprintf("%s/%s.docx", file_Path, file_Name)
//old_Name := context.GetString(consts.ValidatorPrefix + "oldname")
new_Path := context.GetString(consts.ValidatorPrefix + "newpath")
new_finalpath := fmt.Sprintf("%s/%s.docx", new_Path, file_Name)
err := file.FileMove(user_name, final_Path, new_finalpath)
if err != nil {
// 根据不同的错误类型,返回更具体、合适的错误响应给客户端
switch err := err.(type) {
case *os.PathError:
//文件路径错误
response.Fail(context, consts.CurdFilePathErrorCode, consts.CurdFilePathErrorMsg, err.Error())
default:
if err == os.ErrNotExist {
//文件不存在错误
response.Fail(context, consts.CurdFileNotExistCode, consts.CurdFileNotExistMsg, err.Error())
}
}
return
}
// 文件移动成功,返回成功响应给客户端
response.Success(context, consts.CurdStatusOkMsg, "文件移动成功")
}
// 文件保存
func (f *File) Save(context *gin.Context) {
//从context获得路径和文件名并拼接获得最终文件路径
user_name := context.GetString(consts.ValidatorPrefix + "user_name")
Save_path := context.GetString(consts.ValidatorPrefix + "save_path")
file_Name := context.GetString(consts.ValidatorPrefix + "file_name")
final_savePath := fmt.Sprintf("%s/%s.docx", Save_path, file_Name)
fileDataBase64 := context.PostForm("file_data")
if fileDataBase64 == "" {
response.Fail(context, consts.CurdFileNotExistCode, consts.CurdFileNotExistMsg, nil)
return
}
err := file.FileSave(user_name, final_savePath, fileDataBase64)
if err != nil {
// 根据不同的错误类型,返回更具体、合适的错误响应给客户端
switch err := err.(type) {
case *os.PathError:
//文件路径错误
response.Fail(context, consts.CurdFilePathErrorCode, consts.CurdFilePathErrorMsg, err.Error())
default:
if err == os.ErrNotExist {
//文件不存在错误
response.Fail(context, consts.CurdFileNotExistCode, consts.CurdFileNotExistMsg, err.Error())
}
}
return
}
// 文件保存成功,返回成功响应给客户端
response.Success(context, consts.CurdStatusOkMsg, "文件保存成功")
}
// 文件删除
func (f *File) Delete(context *gin.Context) {
// 从context获得用户名、文件路径和文件名并拼接获得最终文件路径
user_name := context.GetString(consts.ValidatorPrefix + "user_name")
file_Path := context.GetString(consts.ValidatorPrefix + "file_path")
file_Name := context.GetString(consts.ValidatorPrefix + "file_name")
final_Path := fmt.Sprintf("%s/%s.docx", file_Path, file_Name)
err := file.FileDe(user_name, final_Path)
if err != nil {
// 根据不同的错误类型,返回更具体、合适的错误响应给客户端
switch err := err.(type) {
case *os.PathError:
//文件路径错误
response.Fail(context, consts.CurdFilePathErrorCode, consts.CurdFilePathErrorMsg, err.Error())
default:
if err == os.ErrNotExist {
//文件不存在错误
response.Fail(context, consts.CurdFileNotExistCode, consts.CurdFileNotExistMsg, err.Error())
}
}
return
}
// 文件删除成功,返回成功响应给客户端
response.Success(context, consts.CurdStatusOkMsg, "文件删除成功")
}

@ -1,136 +0,0 @@
package routers
import (
"github.com/gin-contrib/pprof"
"github.com/gin-gonic/gin"
// "go.uber.org/zap"
"goskeleton/app/global/consts"
"goskeleton/app/global/variable"
"goskeleton/app/http/controller/captcha"
"goskeleton/app/http/middleware/authorization"
"goskeleton/app/http/middleware/cors"
validatorFactory "goskeleton/app/http/validator/core/factory"
// "goskeleton/app/utils/gin_release"
// "net/http"
)
func InitWebRouter_Co() *gin.Engine {
var router *gin.Engine = gin.Default()
// 日志显示在控制台
pprof.Register(router)
//根据配置进行设置跨域
if variable.ConfigYml.GetBool("HttpServer.AllowCrossDomain") {
router.Use(cors.Next())
}
// 创建一个验证码路由
verifyCode := router.Group("captcha")
{
// 验证码业务,该业务无需专门校验参数,所以可以直接调用控制器
verifyCode.GET("/", (&captcha.Captcha{}).GenerateId) // 获取验证码ID
verifyCode.GET("/:captcha_id", (&captcha.Captcha{}).GetImg) // 获取图像地址
verifyCode.GET("/:captcha_id/:captcha_value", (&captcha.Captcha{}).CheckCode) // 校验验证码
}
// 创建一个后端接口路由组
backend := router.Group("/admin/")
{
// 【不需要token】中间件验证的路由 用户注册、登录
noAuth := backend.Group("users/")
{
// 关于路由的第二个参数用法说明
// 1.编写一个表单参数验证器结构体,参见代码: app/http/validator/web/users/register.go
// 2.将以上表单参数验证器注册,遵守 键 =》值 格式注册即可 app/http/validator/common/register_validator/web_register_validator.go 20行就是注册时候的键 consts.ValidatorPrefix+"UsersRegister"
// 3.按照注册时的键,直接从容器调用即可 validatorFactory.Create(consts.ValidatorPrefix+"UsersRegister")
noAuth.POST("register", validatorFactory.Create(consts.ValidatorPrefix+"UsersRegister")) // ok
// 不需要验证码即可登陆
noAuth.POST("login", validatorFactory.Create(consts.ValidatorPrefix+"UsersLogin")) // ok
// 如果加载了验证码中间件那么就需要提交验证码才可以登陆本质上就是给登陆接口增加了2个参数验证码id提交时的键captcha_id 和 验证码值提交时的键 captcha_value具体参见配置文件
//noAuth.Use(authorization.CheckCaptchaAuth()).POST("login", validatorFactory.Create(consts.ValidatorPrefix+"UsersLogin"))
// 获取公钥,用于密码等敏感信息的加密
noAuth.POST("publickey", validatorFactory.Create(consts.ValidatorPrefix+"PublicKey"))
}
// 刷新token
refreshToken := backend.Group("users/")
{
// 刷新token当过期的token在允许失效的延长时间范围内用旧token换取新token
refreshToken.Use(authorization.RefreshTokenConditionCheck()).POST("refreshtoken", validatorFactory.Create(consts.ValidatorPrefix+"RefreshToken"))
}
// TODO:linlnf
// 人工智能识别相关
aiRecognition := backend.Group("ai_recognition/")
{
// 请求图片文字识别
aiRecognition.POST("pic_recognition", validatorFactory.Create(consts.ValidatorPrefix+"PicRecognition"))
// 请求语音识别
aiRecognition.POST("voc_recognition", validatorFactory.Create(consts.ValidatorPrefix+"VocRecognition"))
}
// TODO:linlnf
// 人工智能文档处理相关
aiDoc := backend.Group("ai_doc/")
{
// 请求优化文字
aiDoc.POST("doc_refine", validatorFactory.Create(consts.ValidatorPrefix+"DocRefine"))
}
// 智能排版相关
aiLayout := backend.Group("ai_layout/")
{
// 请求样式生成
aiLayout.POST("style_generate", validatorFactory.Create(consts.ValidatorPrefix+"StyleGenerate"))
// 请求排版
aiLayout.POST("layout_generate", validatorFactory.Create(consts.ValidatorPrefix+"LayoutGenerate"))
}
// 【需要token】中间件验证的路由
backend.Use(authorization.CheckTokenAuth())
{
// 用户组路由
users := backend.Group("users/")
{
// 查询 这里的验证器直接从容器获取是因为程序启动时将验证器注册在了容器具体代码位置App\Http\Validator\Web\Users\xxx
// 展示用户详细信息-用户名、ID
users.GET("info", validatorFactory.Create(consts.ValidatorPrefix+"UsersInfo"))
// 新增
// users.POST("create", validatorFactory.Create(consts.ValidatorPrefix+"UsersStore")) // not need
// 更新用户名或密码
users.POST("username", validatorFactory.Create(consts.ValidatorPrefix+"UsersNameUpdate"))
users.POST("password", validatorFactory.Create(consts.ValidatorPrefix+"UsersPasswordUpdate"))
// 注销用户
users.POST("delete", validatorFactory.Create(consts.ValidatorPrefix+"UsersDestroy"))
// 退出登录
users.POST("logout", validatorFactory.Create(consts.ValidatorPrefix+"UsersLogout"))
}
}
//【需要token】中间件验证的路由
backend.Use(authorization.CheckTokenAuth())
{
// 文件操作相关路由组
file := backend.Group("file/")
{
//创建文件
file.POST("file_creat", validatorFactory.Create(consts.ValidatorPrefix+"FileCreat"))
//打开文件
file.GET("file_get", validatorFactory.Create(consts.ValidatorPrefix+"FileGet"))
//文件重命名
file.POST("file_rename", validatorFactory.Create(consts.ValidatorPrefix+"FileRename"))
//移动文件
file.POST("file_move", validatorFactory.Create(consts.ValidatorPrefix+"FileMove"))
//保存文件
file.POST("file_save", validatorFactory.Create(consts.ValidatorPrefix+"FileSave"))
//删除文件
file.POST("file_delete", validatorFactory.Create(consts.ValidatorPrefix+"FileDelete"))
//创建文件夹
file.POST("folder_creat", validatorFactory.Create(consts.ValidatorPrefix+"FolderCreat"))
}
}
}
return router
}
Loading…
Cancel
Save