2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 12:40:25 +08:00

feat: 文件管理接口

This commit is contained in:
耗子
2023-11-24 02:49:40 +08:00
parent 026e1319fe
commit a80ddfaebc
16 changed files with 2560 additions and 4 deletions

View File

@@ -1,11 +1,457 @@
package controllers
import (
"os"
"path/filepath"
"strings"
"github.com/goravel/framework/contracts/http"
requests "panel/app/http/requests/file"
"panel/pkg/tools"
)
type FileController struct {
// Dependent services
}
func NewFileController() *FileController {
return &FileController{
// Inject services
}
return &FileController{}
}
// Create
//
// @Summary 创建文件/目录
// @Description 创建文件/目录到给定路径
// @Tags 文件管理
// @Accept json
// @Produce json
// @Security BearerToken
// @Param data body requests.NotExist true "request"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/create [post]
func (r *FileController) Create(ctx http.Context) http.Response {
var request requests.NotExist
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
isDir := ctx.Request().InputBool("dir")
if !isDir {
if out, err := tools.Exec("touch " + request.Path); err != nil {
return Error(ctx, http.StatusInternalServerError, out)
}
} else {
if err := tools.Mkdir(request.Path, 0755); err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
}
if err := tools.Chmod(request.Path, 0755); err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
if err := tools.Chown(request.Path, "www", "www"); err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
return Success(ctx, nil)
}
// Content
//
// @Summary 获取文件内容
// @Description 获取给定路径的文件内容
// @Tags 文件管理
// @Accept json
// @Produce json
// @Security BearerToken
// @Param data query requests.Exist true "request"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/content [get]
func (r *FileController) Content(ctx http.Context) http.Response {
var request requests.Exist
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
content, err := tools.Read(request.Path)
if err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
return Success(ctx, content)
}
// Save
//
// @Summary 保存文件内容
// @Description 保存给定路径的文件内容
// @Tags 文件管理
// @Accept json
// @Produce json
// @Security BearerToken
// @Param data body requests.Exist true "request"
// @Param content body string true "content"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/save [post]
func (r *FileController) Save(ctx http.Context) http.Response {
var request requests.Exist
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
content := ctx.Request().Input("content")
fileInfo, err := tools.FileInfo(request.Path)
if err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
if err = tools.Write(request.Path, content, fileInfo.Mode()); err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
return Success(ctx, nil)
}
// Delete
//
// @Summary 删除文件/目录
// @Description 删除给定路径的文件/目录
// @Tags 文件管理
// @Accept json
// @Produce json
// @Security BearerToken
// @Param data body requests.Exist true "request"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/delete [post]
func (r *FileController) Delete(ctx http.Context) http.Response {
var request requests.Exist
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
if err := tools.Remove(request.Path); err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
return Success(ctx, nil)
}
// Upload
//
// @Summary 上传文件
// @Description 上传文件到给定路径
// @Tags 文件管理
// @Accept json
// @Produce json
// @Security BearerToken
// @Param data body requests.NotExist true "request"
// @Param file formData file true "file"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/upload [post]
func (r *FileController) Upload(ctx http.Context) http.Response {
var request requests.NotExist
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
pathInfo, err := tools.FileInfo(request.Path)
if err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
if !pathInfo.IsDir() {
return Error(ctx, http.StatusInternalServerError, "目标路径不是目录")
}
file, err := ctx.Request().File("file")
if err != nil {
return Error(ctx, http.StatusInternalServerError, "上传文件失败")
}
_, err = file.Store(request.Path)
if err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
return Success(ctx, nil)
}
// Move
//
// @Summary 移动文件/目录
// @Description 移动文件/目录到给定路径,等效于重命名
// @Tags 文件管理
// @Accept json
// @Produce json
// @Security BearerToken
// @Param data body requests.Move true "request"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/move [post]
func (r *FileController) Move(ctx http.Context) http.Response {
var request requests.Move
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
if tools.Exists(request.New) && !ctx.Request().InputBool("force") {
return Error(ctx, http.StatusInternalServerError, "目标路径已存在,是否覆盖?")
}
if err := tools.Mv(request.Old, request.New); err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
return Success(ctx, nil)
}
// Copy
//
// @Summary 复制文件/目录
// @Description 复制文件/目录到给定路径
// @Tags 文件管理
// @Accept json
// @Produce json
// @Security BearerToken
// @Param data body requests.Copy true "request"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/copy [post]
func (r *FileController) Copy(ctx http.Context) http.Response {
var request requests.Copy
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
if tools.Exists(request.New) && !ctx.Request().InputBool("force") {
return Error(ctx, http.StatusInternalServerError, "目标路径已存在,是否覆盖?")
}
if err := tools.Cp(request.Old, request.New); err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
return Success(ctx, nil)
}
// Download
//
// @Summary 下载文件
// @Description 下载给定路径的文件
// @Tags 文件管理
// @Accept json
// @Produce json
// @Security BearerToken
// @Param data query requests.NotExist true "request"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/download [get]
func (r *FileController) Download(ctx http.Context) http.Response {
var request requests.NotExist
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
info, err := tools.FileInfo(request.Path)
if err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
if info.IsDir() {
return Error(ctx, http.StatusInternalServerError, "不能下载目录")
}
return ctx.Response().Download(request.Path, info.Name())
}
// RemoteDownload
//
// @Summary 下载远程文件
// @Description 下载远程文件到给定路径
// @Tags 文件管理
// @Accept json
// @Produce json
// @Security BearerToken
// @Param data body requests.NotExist true "request"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/remoteDownload [post]
func (r *FileController) RemoteDownload(ctx http.Context) http.Response {
var request requests.NotExist
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
// TODO 使用异步任务下载文件
return nil
}
// Info
//
// @Summary 获取文件/目录信息
// @Description 获取给定路径的文件/目录信息
// @Tags 文件管理
// @Accept json
// @Produce json
// @Security BearerToken
// @Param data query requests.Exist true "request"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/info [get]
func (r *FileController) Info(ctx http.Context) http.Response {
var request requests.Exist
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
fileInfo, err := tools.FileInfo(request.Path)
if err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
return Success(ctx, fileInfo)
}
// Permission
//
// @Summary 修改文件/目录权限
// @Description 修改给定路径的文件/目录权限
// @Tags 文件管理
// @Accept json
// @Produce json
// @Security BearerToken
// @Param data body requests.Permission true "request"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/permission [post]
func (r *FileController) Permission(ctx http.Context) http.Response {
var request requests.Permission
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
if err := tools.Chmod(request.Path, os.FileMode(request.Mode)); err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
return Success(ctx, nil)
}
// Archive
//
// @Summary 压缩文件/目录
// @Description 压缩文件/目录到给定路径
// @Tags 文件管理
// @Accept json
// @Produce json
// @Security BearerToken
// @Param data body requests.Archive true "request"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/archive [post]
func (r *FileController) Archive(ctx http.Context) http.Response {
var request requests.Archive
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
if err := tools.Archive(request.Paths, request.File); err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
return Success(ctx, nil)
}
// UnArchive
//
// @Summary 解压文件/目录
// @Description 解压文件/目录到给定路径
// @Tags 文件管理
// @Accept json
// @Produce json
// @Security BearerToken
// @Param data body requests.UnArchive true "request"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/unArchive [post]
func (r *FileController) UnArchive(ctx http.Context) http.Response {
var request requests.UnArchive
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
if err := tools.UnArchive(request.File, request.Path); err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
return Success(ctx, nil)
}
// Search
//
// @Summary 搜索文件/目录
// @Description 通过关键词搜索给定路径的文件/目录
// @Tags 文件管理
// @Accept json
// @Produce json
// @Param data body requests.Search true "request"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/search [post]
func (r *FileController) Search(ctx http.Context) http.Response {
var request requests.Search
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
paths := make(map[string]os.FileInfo)
err := filepath.Walk(request.Path, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if strings.Contains(info.Name(), request.KeyWord) {
paths[path] = info
}
return nil
})
if err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
return Success(ctx, paths)
}
// List
//
// @Summary 获取文件/目录列表
// @Description 获取给定路径的文件/目录列表
// @Tags 文件管理
// @Accept json
// @Produce json
// @Param data query requests.Exist true "request"
// @Success 200 {object} SuccessResponse
// @Router /panel/file/list [get]
func (r *FileController) List(ctx http.Context) http.Response {
var request requests.Exist
sanitize := Sanitize(ctx, &request)
if sanitize != nil {
return sanitize
}
paths := make(map[string]os.FileInfo)
err := filepath.Walk(request.Path, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
paths[path] = info
return nil
})
if err != nil {
return Error(ctx, http.StatusInternalServerError, err.Error())
}
return Success(ctx, paths)
}

View File

@@ -0,0 +1,35 @@
package requests
import (
"github.com/goravel/framework/contracts/http"
"github.com/goravel/framework/contracts/validation"
)
type Archive struct {
Paths []string `form:"paths" json:"paths"`
File string `form:"file" json:"file"`
}
func (r *Archive) Authorize(ctx http.Context) error {
return nil
}
func (r *Archive) Rules(ctx http.Context) map[string]string {
return map[string]string{
"paths": "array",
"paths.*": "regex:^/[a-zA-Z0-9_-]+(\\/[a-zA-Z0-9_-]+)*$|path_exists",
"file": "regex:^/[a-zA-Z0-9_-]+(\\/[a-zA-Z0-9_-]+)*$|path_not_exists",
}
}
func (r *Archive) Messages(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *Archive) Attributes(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *Archive) PrepareForValidation(ctx http.Context, data validation.Data) error {
return nil
}

View File

@@ -0,0 +1,34 @@
package requests
import (
"github.com/goravel/framework/contracts/http"
"github.com/goravel/framework/contracts/validation"
)
type Copy struct {
Old string `form:"old" json:"old"`
New string `form:"new" json:"new"`
}
func (r *Copy) Authorize(ctx http.Context) error {
return nil
}
func (r *Copy) Rules(ctx http.Context) map[string]string {
return map[string]string{
"old": "regex:^/[a-zA-Z0-9_-]+(\\/[a-zA-Z0-9_-]+)*$|path_exists",
"new": "regex:^/[a-zA-Z0-9_-]+(\\/[a-zA-Z0-9_-]+)*$",
}
}
func (r *Copy) Messages(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *Copy) Attributes(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *Copy) PrepareForValidation(ctx http.Context, data validation.Data) error {
return nil
}

View File

@@ -0,0 +1,32 @@
package requests
import (
"github.com/goravel/framework/contracts/http"
"github.com/goravel/framework/contracts/validation"
)
type Exist struct {
Path string `form:"path" json:"path"`
}
func (r *Exist) Authorize(ctx http.Context) error {
return nil
}
func (r *Exist) Rules(ctx http.Context) map[string]string {
return map[string]string{
"path": "regex:^/[a-zA-Z0-9_-]+(\\/[a-zA-Z0-9_-]+)*$|path_exists",
}
}
func (r *Exist) Messages(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *Exist) Attributes(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *Exist) PrepareForValidation(ctx http.Context, data validation.Data) error {
return nil
}

View File

@@ -0,0 +1,34 @@
package requests
import (
"github.com/goravel/framework/contracts/http"
"github.com/goravel/framework/contracts/validation"
)
type Move struct {
Old string `form:"old" json:"old"`
New string `form:"new" json:"new"`
}
func (r *Move) Authorize(ctx http.Context) error {
return nil
}
func (r *Move) Rules(ctx http.Context) map[string]string {
return map[string]string{
"old": "regex:^/[a-zA-Z0-9_-]+(\\/[a-zA-Z0-9_-]+)*$|path_exists",
"new": "regex:^/[a-zA-Z0-9_-]+(\\/[a-zA-Z0-9_-]+)*$|path_not_exists",
}
}
func (r *Move) Messages(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *Move) Attributes(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *Move) PrepareForValidation(ctx http.Context, data validation.Data) error {
return nil
}

View File

@@ -0,0 +1,32 @@
package requests
import (
"github.com/goravel/framework/contracts/http"
"github.com/goravel/framework/contracts/validation"
)
type NotExist struct {
Path string `form:"path" json:"path"`
}
func (r *NotExist) Authorize(ctx http.Context) error {
return nil
}
func (r *NotExist) Rules(ctx http.Context) map[string]string {
return map[string]string{
"path": "regex:^/[a-zA-Z0-9_-]+(\\/[a-zA-Z0-9_-]+)*$|path_not_exists",
}
}
func (r *NotExist) Messages(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *NotExist) Attributes(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *NotExist) PrepareForValidation(ctx http.Context, data validation.Data) error {
return nil
}

View File

@@ -0,0 +1,38 @@
package requests
import (
"github.com/goravel/framework/contracts/http"
"github.com/goravel/framework/contracts/validation"
)
type Permission struct {
Path string `form:"path" json:"path"`
Mode uint `form:"mode" json:"mode" filter:"uint"`
Owner string `form:"owner" json:"owner"`
Group string `form:"group" json:"group"`
}
func (r *Permission) Authorize(ctx http.Context) error {
return nil
}
func (r *Permission) Rules(ctx http.Context) map[string]string {
return map[string]string{
"path": "regex:^/[a-zA-Z0-9_-]+(\\/[a-zA-Z0-9_-]+)*$|path_exists",
"mode": "regex:^[0-7]{3}$|uint",
"owner": "regex:^[a-zA-Z0-9_-]+$",
"group": "regex:^[a-zA-Z0-9_-]+$",
}
}
func (r *Permission) Messages(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *Permission) Attributes(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *Permission) PrepareForValidation(ctx http.Context, data validation.Data) error {
return nil
}

View File

@@ -0,0 +1,34 @@
package requests
import (
"github.com/goravel/framework/contracts/http"
"github.com/goravel/framework/contracts/validation"
)
type Search struct {
Path string `form:"path" json:"path"`
KeyWord string `form:"keyword" json:"keyword"`
}
func (r *Search) Authorize(ctx http.Context) error {
return nil
}
func (r *Search) Rules(ctx http.Context) map[string]string {
return map[string]string{
"path": "regex:^/[a-zA-Z0-9_-]+(\\/[a-zA-Z0-9_-]+)*$|path_exists",
"keyword": "required|string",
}
}
func (r *Search) Messages(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *Search) Attributes(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *Search) PrepareForValidation(ctx http.Context, data validation.Data) error {
return nil
}

View File

@@ -0,0 +1,34 @@
package requests
import (
"github.com/goravel/framework/contracts/http"
"github.com/goravel/framework/contracts/validation"
)
type UnArchive struct {
File string `form:"file" json:"file"`
Path string `form:"path" json:"path"`
}
func (r *UnArchive) Authorize(ctx http.Context) error {
return nil
}
func (r *UnArchive) Rules(ctx http.Context) map[string]string {
return map[string]string{
"file": "regex:^/[a-zA-Z0-9_-]+(\\/[a-zA-Z0-9_-]+)*$|path_exists",
"path": "regex:^/[a-zA-Z0-9_-]+(\\/[a-zA-Z0-9_-]+)*$|path_not_exists",
}
}
func (r *UnArchive) Messages(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *UnArchive) Attributes(ctx http.Context) map[string]string {
return map[string]string{}
}
func (r *UnArchive) PrepareForValidation(ctx http.Context, data validation.Data) error {
return nil
}

View File

@@ -26,5 +26,7 @@ func (receiver *ValidationServiceProvider) rules() []validation.Rule {
&rules.Exists{},
&rules.NotExists{},
&rules.Captcha{},
&rules.PathExists{},
&rules.PathNotExists{},
}
}

36
app/rules/path_exist.go Normal file
View File

@@ -0,0 +1,36 @@
package rules
import (
"github.com/goravel/framework/contracts/validation"
"github.com/spf13/cast"
"panel/pkg/tools"
)
type PathExists struct {
}
// Signature The name of the rule.
func (receiver *PathExists) Signature() string {
return "path_exists"
}
// Passes Determine if the validation rule passes.
func (receiver *PathExists) Passes(_ validation.Data, val any, options ...any) bool {
// 用户请求过来的数据
requestValue, err := cast.ToStringE(val)
if err != nil {
return false
}
// 判断是否为空
if len(requestValue) == 0 {
return false
}
return tools.Exists(requestValue)
}
// Message Get the validation error message.
func (receiver *PathExists) Message() string {
return "路径 %v 不存在"
}

View File

@@ -0,0 +1,36 @@
package rules
import (
"github.com/goravel/framework/contracts/validation"
"github.com/spf13/cast"
"panel/pkg/tools"
)
type PathNotExists struct {
}
// Signature The name of the rule.
func (receiver *PathNotExists) Signature() string {
return "path_exists"
}
// Passes Determine if the validation rule passes.
func (receiver *PathNotExists) Passes(_ validation.Data, val any, options ...any) bool {
// 用户请求过来的数据
requestValue, err := cast.ToStringE(val)
if err != nil {
return false
}
// 判断是否为空
if len(requestValue) == 0 {
return false
}
return !tools.Exists(requestValue)
}
// Message Get the validation error message.
func (receiver *PathNotExists) Message() string {
return "路径 %v 已存在"
}

View File

@@ -858,6 +858,581 @@ const docTemplate = `{
}
}
},
"/panel/file/archive": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "压缩文件/目录到给定路径",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "压缩文件/目录",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.Archive"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/content": {
"get": {
"security": [
{
"BearerToken": []
}
],
"description": "获取给定路径的文件内容",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "获取文件内容",
"parameters": [
{
"type": "string",
"name": "path",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/copy": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "复制文件/目录到给定路径",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "复制文件/目录",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.Copy"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/create": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "创建文件/目录到给定路径",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "创建文件/目录",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.NotExist"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/delete": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "删除给定路径的文件/目录",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "删除文件/目录",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.Exist"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/download": {
"get": {
"security": [
{
"BearerToken": []
}
],
"description": "下载给定路径的文件",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "下载文件",
"parameters": [
{
"type": "string",
"name": "path",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/info": {
"get": {
"security": [
{
"BearerToken": []
}
],
"description": "获取给定路径的文件/目录信息",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "获取文件/目录信息",
"parameters": [
{
"type": "string",
"name": "path",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/list": {
"get": {
"description": "获取给定路径的文件/目录列表",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "获取文件/目录列表",
"parameters": [
{
"type": "string",
"name": "path",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/move": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "移动文件/目录到给定路径,等效于重命名",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "移动文件/目录",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.Move"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/permission": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "修改给定路径的文件/目录权限",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "修改文件/目录权限",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.Permission"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/remoteDownload": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "下载远程文件到给定路径",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "下载远程文件",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.NotExist"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/save": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "保存给定路径的文件内容",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "保存文件内容",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.Exist"
}
},
{
"description": "content",
"name": "content",
"in": "body",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/search": {
"post": {
"description": "通过关键词搜索给定路径的文件/目录",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "搜索文件/目录",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.Search"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/unArchive": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "解压文件/目录到给定路径",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "解压文件/目录",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.UnArchive"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/upload": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "上传文件到给定路径",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "上传文件",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.NotExist"
}
},
{
"type": "file",
"description": "file",
"name": "file",
"in": "formData",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/setting/list": {
"get": {
"security": [
@@ -2302,6 +2877,20 @@ const docTemplate = `{
}
}
},
"requests.Archive": {
"type": "object",
"properties": {
"file": {
"type": "string"
},
"paths": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"requests.CertStore": {
"type": "object",
"properties": {
@@ -2357,6 +2946,17 @@ const docTemplate = `{
}
}
},
"requests.Copy": {
"type": "object",
"properties": {
"new": {
"type": "string"
},
"old": {
"type": "string"
}
}
},
"requests.Create": {
"type": "object",
"properties": {
@@ -2419,6 +3019,14 @@ const docTemplate = `{
}
}
},
"requests.Exist": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
}
},
"requests.Login": {
"type": "object",
"properties": {
@@ -2430,6 +3038,25 @@ const docTemplate = `{
}
}
},
"requests.Move": {
"type": "object",
"properties": {
"new": {
"type": "string"
},
"old": {
"type": "string"
}
}
},
"requests.NotExist": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
}
},
"requests.Obtain": {
"type": "object",
"properties": {
@@ -2438,6 +3065,23 @@ const docTemplate = `{
}
}
},
"requests.Permission": {
"type": "object",
"properties": {
"group": {
"type": "string"
},
"mode": {
"type": "integer"
},
"owner": {
"type": "string"
},
"path": {
"type": "string"
}
}
},
"requests.Renew": {
"type": "object",
"properties": {
@@ -2514,6 +3158,28 @@ const docTemplate = `{
}
}
},
"requests.Search": {
"type": "object",
"properties": {
"keyword": {
"type": "string"
},
"path": {
"type": "string"
}
}
},
"requests.UnArchive": {
"type": "object",
"properties": {
"file": {
"type": "string"
},
"path": {
"type": "string"
}
}
},
"requests.UpdateConfig": {
"type": "object",
"properties": {

View File

@@ -851,6 +851,581 @@
}
}
},
"/panel/file/archive": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "压缩文件/目录到给定路径",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "压缩文件/目录",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.Archive"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/content": {
"get": {
"security": [
{
"BearerToken": []
}
],
"description": "获取给定路径的文件内容",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "获取文件内容",
"parameters": [
{
"type": "string",
"name": "path",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/copy": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "复制文件/目录到给定路径",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "复制文件/目录",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.Copy"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/create": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "创建文件/目录到给定路径",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "创建文件/目录",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.NotExist"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/delete": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "删除给定路径的文件/目录",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "删除文件/目录",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.Exist"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/download": {
"get": {
"security": [
{
"BearerToken": []
}
],
"description": "下载给定路径的文件",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "下载文件",
"parameters": [
{
"type": "string",
"name": "path",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/info": {
"get": {
"security": [
{
"BearerToken": []
}
],
"description": "获取给定路径的文件/目录信息",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "获取文件/目录信息",
"parameters": [
{
"type": "string",
"name": "path",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/list": {
"get": {
"description": "获取给定路径的文件/目录列表",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "获取文件/目录列表",
"parameters": [
{
"type": "string",
"name": "path",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/move": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "移动文件/目录到给定路径,等效于重命名",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "移动文件/目录",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.Move"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/permission": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "修改给定路径的文件/目录权限",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "修改文件/目录权限",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.Permission"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/remoteDownload": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "下载远程文件到给定路径",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "下载远程文件",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.NotExist"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/save": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "保存给定路径的文件内容",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "保存文件内容",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.Exist"
}
},
{
"description": "content",
"name": "content",
"in": "body",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/search": {
"post": {
"description": "通过关键词搜索给定路径的文件/目录",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "搜索文件/目录",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.Search"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/unArchive": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "解压文件/目录到给定路径",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "解压文件/目录",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.UnArchive"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/file/upload": {
"post": {
"security": [
{
"BearerToken": []
}
],
"description": "上传文件到给定路径",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"文件管理"
],
"summary": "上传文件",
"parameters": [
{
"description": "request",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/requests.NotExist"
}
},
{
"type": "file",
"description": "file",
"name": "file",
"in": "formData",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.SuccessResponse"
}
}
}
}
},
"/panel/setting/list": {
"get": {
"security": [
@@ -2295,6 +2870,20 @@
}
}
},
"requests.Archive": {
"type": "object",
"properties": {
"file": {
"type": "string"
},
"paths": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"requests.CertStore": {
"type": "object",
"properties": {
@@ -2350,6 +2939,17 @@
}
}
},
"requests.Copy": {
"type": "object",
"properties": {
"new": {
"type": "string"
},
"old": {
"type": "string"
}
}
},
"requests.Create": {
"type": "object",
"properties": {
@@ -2412,6 +3012,14 @@
}
}
},
"requests.Exist": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
}
},
"requests.Login": {
"type": "object",
"properties": {
@@ -2423,6 +3031,25 @@
}
}
},
"requests.Move": {
"type": "object",
"properties": {
"new": {
"type": "string"
},
"old": {
"type": "string"
}
}
},
"requests.NotExist": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
}
},
"requests.Obtain": {
"type": "object",
"properties": {
@@ -2431,6 +3058,23 @@
}
}
},
"requests.Permission": {
"type": "object",
"properties": {
"group": {
"type": "string"
},
"mode": {
"type": "integer"
},
"owner": {
"type": "string"
},
"path": {
"type": "string"
}
}
},
"requests.Renew": {
"type": "object",
"properties": {
@@ -2507,6 +3151,28 @@
}
}
},
"requests.Search": {
"type": "object",
"properties": {
"keyword": {
"type": "string"
},
"path": {
"type": "string"
}
}
},
"requests.UnArchive": {
"type": "object",
"properties": {
"file": {
"type": "string"
},
"path": {
"type": "string"
}
}
},
"requests.UpdateConfig": {
"type": "object",
"properties": {

View File

@@ -212,6 +212,15 @@ definitions:
type: integer
type: array
type: object
requests.Archive:
properties:
file:
type: string
paths:
items:
type: string
type: array
type: object
requests.CertStore:
properties:
auto_renew:
@@ -248,6 +257,13 @@ definitions:
website_id:
type: integer
type: object
requests.Copy:
properties:
new:
type: string
old:
type: string
type: object
requests.Create:
properties:
auth_user:
@@ -288,6 +304,11 @@ definitions:
name:
type: string
type: object
requests.Exist:
properties:
path:
type: string
type: object
requests.Login:
properties:
password:
@@ -295,11 +316,34 @@ definitions:
username:
type: string
type: object
requests.Move:
properties:
new:
type: string
old:
type: string
type: object
requests.NotExist:
properties:
path:
type: string
type: object
requests.Obtain:
properties:
id:
type: integer
type: object
requests.Permission:
properties:
group:
type: string
mode:
type: integer
owner:
type: string
path:
type: string
type: object
requests.Renew:
properties:
id:
@@ -350,6 +394,20 @@ definitions:
waf_mode:
type: string
type: object
requests.Search:
properties:
keyword:
type: string
path:
type: string
type: object
requests.UnArchive:
properties:
file:
type: string
path:
type: string
type: object
requests.UpdateConfig:
properties:
config:
@@ -994,6 +1052,361 @@ paths:
summary: 更新 ACME 用户
tags:
- 证书管理
/panel/file/archive:
post:
consumes:
- application/json
description: 压缩文件/目录到给定路径
parameters:
- description: request
in: body
name: data
required: true
schema:
$ref: '#/definitions/requests.Archive'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
security:
- BearerToken: []
summary: 压缩文件/目录
tags:
- 文件管理
/panel/file/content:
get:
consumes:
- application/json
description: 获取给定路径的文件内容
parameters:
- in: query
name: path
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
security:
- BearerToken: []
summary: 获取文件内容
tags:
- 文件管理
/panel/file/copy:
post:
consumes:
- application/json
description: 复制文件/目录到给定路径
parameters:
- description: request
in: body
name: data
required: true
schema:
$ref: '#/definitions/requests.Copy'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
security:
- BearerToken: []
summary: 复制文件/目录
tags:
- 文件管理
/panel/file/create:
post:
consumes:
- application/json
description: 创建文件/目录到给定路径
parameters:
- description: request
in: body
name: data
required: true
schema:
$ref: '#/definitions/requests.NotExist'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
security:
- BearerToken: []
summary: 创建文件/目录
tags:
- 文件管理
/panel/file/delete:
post:
consumes:
- application/json
description: 删除给定路径的文件/目录
parameters:
- description: request
in: body
name: data
required: true
schema:
$ref: '#/definitions/requests.Exist'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
security:
- BearerToken: []
summary: 删除文件/目录
tags:
- 文件管理
/panel/file/download:
get:
consumes:
- application/json
description: 下载给定路径的文件
parameters:
- in: query
name: path
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
security:
- BearerToken: []
summary: 下载文件
tags:
- 文件管理
/panel/file/info:
get:
consumes:
- application/json
description: 获取给定路径的文件/目录信息
parameters:
- in: query
name: path
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
security:
- BearerToken: []
summary: 获取文件/目录信息
tags:
- 文件管理
/panel/file/list:
get:
consumes:
- application/json
description: 获取给定路径的文件/目录列表
parameters:
- in: query
name: path
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
summary: 获取文件/目录列表
tags:
- 文件管理
/panel/file/move:
post:
consumes:
- application/json
description: 移动文件/目录到给定路径,等效于重命名
parameters:
- description: request
in: body
name: data
required: true
schema:
$ref: '#/definitions/requests.Move'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
security:
- BearerToken: []
summary: 移动文件/目录
tags:
- 文件管理
/panel/file/permission:
post:
consumes:
- application/json
description: 修改给定路径的文件/目录权限
parameters:
- description: request
in: body
name: data
required: true
schema:
$ref: '#/definitions/requests.Permission'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
security:
- BearerToken: []
summary: 修改文件/目录权限
tags:
- 文件管理
/panel/file/remoteDownload:
post:
consumes:
- application/json
description: 下载远程文件到给定路径
parameters:
- description: request
in: body
name: data
required: true
schema:
$ref: '#/definitions/requests.NotExist'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
security:
- BearerToken: []
summary: 下载远程文件
tags:
- 文件管理
/panel/file/save:
post:
consumes:
- application/json
description: 保存给定路径的文件内容
parameters:
- description: request
in: body
name: data
required: true
schema:
$ref: '#/definitions/requests.Exist'
- description: content
in: body
name: content
required: true
schema:
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
security:
- BearerToken: []
summary: 保存文件内容
tags:
- 文件管理
/panel/file/search:
post:
consumes:
- application/json
description: 通过关键词搜索给定路径的文件/目录
parameters:
- description: request
in: body
name: data
required: true
schema:
$ref: '#/definitions/requests.Search'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
summary: 搜索文件/目录
tags:
- 文件管理
/panel/file/unArchive:
post:
consumes:
- application/json
description: 解压文件/目录到给定路径
parameters:
- description: request
in: body
name: data
required: true
schema:
$ref: '#/definitions/requests.UnArchive'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
security:
- BearerToken: []
summary: 解压文件/目录
tags:
- 文件管理
/panel/file/upload:
post:
consumes:
- application/json
description: 上传文件到给定路径
parameters:
- description: request
in: body
name: data
required: true
schema:
$ref: '#/definitions/requests.NotExist'
- description: file
in: formData
name: file
required: true
type: file
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.SuccessResponse'
security:
- BearerToken: []
summary: 上传文件
tags:
- 文件管理
/panel/setting/list:
get:
description: 获取面板设置列表

View File

@@ -113,6 +113,24 @@ func Api() {
r.Get("pingStatus", safeController.GetPingStatus)
r.Post("pingStatus", safeController.SetPingStatus)
})
r.Prefix("file").Middleware(middleware.Jwt()).Group(func(r route.Router) {
fileController := controllers.NewFileController()
r.Post("create", fileController.Create)
r.Get("content", fileController.Content)
r.Post("save", fileController.Save)
r.Post("delete", fileController.Delete)
r.Post("upload", fileController.Upload)
r.Post("move", fileController.Move)
r.Post("copy", fileController.Copy)
r.Get("download", fileController.Download)
r.Post("remoteDownload", fileController.RemoteDownload)
r.Get("info", fileController.Info)
r.Post("permission", fileController.Permission)
r.Post("archive", fileController.Archive)
r.Post("unArchive", fileController.UnArchive)
r.Post("search", fileController.Search)
r.Post("list", fileController.List)
})
r.Prefix("monitor").Middleware(middleware.Jwt()).Group(func(r route.Router) {
monitorController := controllers.NewMonitorController()
r.Post("switch", monitorController.Switch)