秦芳睿
2025-03-11 aaf39e16669ded322e8b82afc11e732f3b4e6d36
feat(SMTAIServer):增加文件内容传输并优化文件处理

- 在 SMTAIServerRequest 中添加文件内容传输
- 在 SMTJavaAIControl 中实现文件类型检查和转换- 优化文件下载功能,直接处理字节数据
- 移除未使用的导入和变量
已修改2个文件
29 ■■■■■ 文件已修改
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTJavaAIControl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/core/SMTAIServerRequest.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTJavaAIControl.java
@@ -3,13 +3,8 @@
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.Map.Entry;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -97,10 +92,16 @@
                    {
                        for(MultipartFile file : files)
                        {
                            String fileId = SMTStatic.newUUID();
                            String fileText=null;
                            String fileSuffix = (String) SMTAIServerApp.getApp().getGlobalConfig("file_suffix", false);
                            String fileName = new File(file.getOriginalFilename()).getName();
                            byte[] fileData = readAttachFile(file);
                            String fileText = new String(fileData, "UTF-8");
                            if (fileSuffix.contains(fileName.substring(fileName.lastIndexOf(".") + 1))) {
                                fileText = SMTAIServerApp.fileTranslTxt(file);
                            }else {
                                fileText = new String(fileData, "UTF-8");
                            }
                            String fileId = SMTStatic.newUUID();
                            db.executeSQL(
                                  " INSERT INTO chat_history_attach(attach_id, attach_type, attach_title, attach_bytes)"
                                + " VALUES(?,?,?,?)", new Object[] {
@@ -1355,16 +1356,19 @@
            // 获取文件信息
            DBRecord fileRecord = dbRecords.getRecords().get(0);
            String attachTitle = fileRecord.getString("attach_title");  // 获取文件标题
            String attachBytes = fileRecord.getString("attach_bytes");
            byte[] bytes = attachBytes.getBytes();
            // 获取文件的字节数据,假设返回的是字节数组
            byte[] bytes = (byte[]) fileRecord.getValue("attach_bytes");  // 获取字节数据
            // 设置响应头和文件名
            String fileName = attachTitle != null ? attachTitle : "downloaded_file";
            response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
            response.setContentType("application/octet-stream");
            response.getOutputStream().write(bytes);
            response.getOutputStream().flush();
            response.getOutputStream().write(bytes);  // 写入字节数据
            response.getOutputStream().flush();
        } catch (Exception e) {
            throw new Exception("Error processing file download: " + e.getMessage());
        }
    }
}
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/core/SMTAIServerRequest.java
@@ -55,6 +55,7 @@
        {
            jsonWr.addKeyValue("file_id", _fileId);
            jsonWr.addKeyValue("file_name", _fileName);
            jsonWr.addKeyValue("file_content", _fileText);
        }
    }