Files
RUSTDESK-AP-SERVER-SUNLIX/http/controller/admin/clientBuildUpload.go

75 lines
2.3 KiB
Go

package admin
import (
"encoding/base64"
"io"
"os"
"path/filepath"
"github.com/gin-gonic/gin"
"github.com/lejianwen/rustdesk-api/v2/global"
"github.com/lejianwen/rustdesk-api/v2/http/response"
"github.com/lejianwen/rustdesk-api/v2/service"
)
// UploadConfigFile загружает конфигурационный файл для использования в генерации клиента
// @Tags 客户端编译
// @Summary 上传配置文件
// @Description 上传自定义配置文件(无限制,任何文件都可以上传)
// @Accept multipart/form-data
// @Produce json
// @Param file formData file true "配置文件"
// @Success 200 {object} response.Response{data=object{file_content=string}}
// @Failure 500 {object} response.Response
// @Router /admin/client_build/upload_config [post]
// @Security token
func (ct *ClientBuild) UploadConfigFile(c *gin.Context) {
u := service.AllService.UserService.CurUser(c)
if u.Id == 0 {
response.Fail(c, 101, response.TranslateMsg(c, "UserNotFound"))
return
}
// Получаем загруженный файл
file, err := c.FormFile("file")
if err != nil {
response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+": file is required")
return
}
// Открываем файл
src, err := file.Open()
if err != nil {
response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+": "+err.Error())
return
}
defer src.Close()
// Читаем содержимое файла
fileContent, err := io.ReadAll(src)
if err != nil {
response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+": "+err.Error())
return
}
// Кодируем в base64 для передачи в JSON
fileContentBase64 := base64.StdEncoding.EncodeToString(fileContent)
// Опционально: сохраняем файл для справки
uploadDir := filepath.Join(global.Config.Gin.ResourcesPath, "uploads", "configs")
if err := os.MkdirAll(uploadDir, 0755); err == nil {
dst := filepath.Join(uploadDir, file.Filename)
if err := c.SaveUploadedFile(file, dst); err == nil {
// Файл сохранен
}
}
response.Success(c, gin.H{
"file_name": file.Filename,
"file_size": file.Size,
"file_content": fileContentBase64,
"message": "File uploaded successfully. Use file_content in custom_config_file field.",
})
}