添加前端文件保存到后端的内容

master^2
dfz 2 weeks ago
parent 773cc03988
commit 56f8b65c39

@ -2,6 +2,7 @@ package file
import (
"encoding/base64"
"fmt"
"os"
"path/filepath"
)
@ -15,24 +16,41 @@ func FileSave(userName, savePath, fileDataBase64 string) error {
baseDir := filepath.Join(currentDir, "file_library")
fullFilePath := filepath.Join(baseDir, userName, savePath)
// 对 base64 编码的文件数据进行解码 base64.StdEncoding.DecodeString()
// 创建文件所在目录(如果不存在)
dir := filepath.Dir(fullFilePath)
if err := os.MkdirAll(dir, 0755); err != nil {
return err
}
// 记录开始解码
fmt.Println("开始对文件数据进行Base64解码...")
fileData, err := base64.StdEncoding.DecodeString(fileDataBase64)
if err != nil {
// 记录解码失败及错误信息
fmt.Printf("Base64解码失败错误信息%v\n", err)
return err
}
// 记录解码成功
fmt.Println("Base64解码成功")
// 创建目标文件,用于写入解码后的文件内容
// 创建目标文件前记录日志
fmt.Printf("准备创建文件:%s\n", fullFilePath)
targetFile, err := os.Create(fullFilePath)
if err != nil {
// 记录创建文件失败及错误信息
fmt.Printf("创建文件失败,错误信息:%v\n", err)
return err
}
defer targetFile.Close()
// 将解码后的文件内容写入到目标文件中
// 写入文件内容前记录日志
fmt.Println("准备写入文件内容")
_, err = targetFile.Write(fileData)
if err != nil {
// 记录写入文件内容失败及错误信息
fmt.Printf("写入文件内容失败,错误信息:%v\n", err)
return err
}
fmt.Println("文件内容写入成功")
return nil
}

@ -0,0 +1 @@
基于大小模型协同的在线编辑器

@ -1,6 +1,10 @@
// utils.js
import { MarkdownToHtml } from '@ckeditor/ckeditor5-markdown-gfm/src/markdown2html/markdown2html.js';
import { HtmlToMarkdown } from '@ckeditor/ckeditor5-markdown-gfm/src/html2markdown/html2markdown.js';
import axios from 'axios';
// 导入ModulerUser模块
import ModulerUser from '../store/user.js';
// 获取用户配置
export function getUserConfigFromBackend() {
// TODO 请求用户样式
@ -95,8 +99,10 @@ export function getUserConfigFromBackend() {
};
}
function isBase64(str) {
return /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/.test(str);
}
// TODO 实现自动保存saveData方法将编辑内容发送至后端
// DFZ
export function saveData(data) {
// return new Promise( resolve => {
// setTimeout( () => {
@ -107,6 +113,65 @@ export function saveData(data) {
// } );
console.log('saving...');
console.log(data);
let encodedData;
if (typeof data ==='string') {
// 去除HTML标签将内容转换为纯文本
const textWithoutTags = data.replace(/<[^>]*>/g, '');
// 使用btoa进行Base64编码同时处理可能出现的编码异常情况比如包含非ASCII字符等
try {
encodedData = btoa(unescape(encodeURIComponent(textWithoutTags)));
} catch (e) {
console.error('对文本内容进行Base64编码时出错:', e);
throw new Error('数据编码失败,请检查数据内容');
}
} else {
console.error('不支持的数据类型,请传入文本内容');
throw new Error('不支持的数据类型');
}
if (!isBase64(encodedData)) {
console.error('Base64编码后的数据格式不正确');
throw new Error('数据格式错误');
}
// 从ModulerUser模块的状态中获取相关信息
const { username, path } = ModulerUser.state;
const fileName = 'yourFileNameHere'; // 这里需要替换为实际的文件名
// path是相对用户主目录的路径各部分组成的数组拼接成合适的相对路径字符串
const savePath = path.join('/');
const formData = new FormData();
formData.append('user_name', username);
formData.append('file_name', fileName);
formData.append('save_path', savePath);
formData.append('file_data', encodedData);
return axios.post('http://localhost:14514/admin/file/file_save', formData, {
headers: {
'Content-Type': 'multipart/form-data',
//'Authorization': `Bearer ${ModulerUser.state.access}`
}
})
.then(response => {
if (response.status === 200 && response.data.code === 200 && response.data.data === "文件保存成功") {
console.log('文件保存成功,返回信息:', response.data);
return response.data;
} else {
console.error('文件保存失败,返回信息:', response.data);
throw new Error(`文件保存失败,返回信息: ${JSON.stringify(response.data)}`);
}
})
.catch(error => {
if (error.response && error.response.status === 400) {
console.error('文件保存出现问题,可能是请求参数或后端业务逻辑执行出错,请检查相关信息');
} else {
console.error('保存文件出现其他错误:', error);
}
throw error;
});
}

Loading…
Cancel
Save