From e1b48a354bb0a430a1f913f1b8de03d69c9514e9 Mon Sep 17 00:00:00 2001
From: 6c <420680616@qq.com>
Date: 星期一, 03 十一月 2025 11:56:43 +0800
Subject: [PATCH] 已送审保养打印-打印模板处理为保存到数据库
---
src/main/java/com/product/file/service/FileManagerService.java | 326 ++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 244 insertions(+), 82 deletions(-)
diff --git a/src/main/java/com/product/file/service/FileManagerService.java b/src/main/java/com/product/file/service/FileManagerService.java
index a1b32dd..373343b 100644
--- a/src/main/java/com/product/file/service/FileManagerService.java
+++ b/src/main/java/com/product/file/service/FileManagerService.java
@@ -1,10 +1,12 @@
package com.product.file.service;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.product.common.lang.StringUtils;
+import com.product.core.cache.util.RedisUtil;
import com.product.core.config.CoreConst;
import com.product.core.config.Global;
import com.product.core.connection.ConnectionManager;
@@ -25,6 +27,10 @@
import com.product.module.sys.entity.SystemUser;
import com.product.tool.table.enums.FieldType;
import com.product.util.BaseUtil;
+import com.product.util.http.HttpRequestUtil;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -33,8 +39,7 @@
import java.io.*;
import java.net.URLEncoder;
import java.nio.file.Files;
-import java.sql.Blob;
-import java.sql.SQLException;
+import java.nio.file.StandardCopyOption;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -280,6 +285,134 @@
}
}
+ /**
+ * 闆嗙兢鏂囦欢鍚屾鏂规硶-鎺ユ敹
+ * @param rpe
+ * @return
+ */
+ public void clusterFileSyncAccept(RequestParameterEntity rpe) throws IOException {
+ List<String> ipList = RedisUtil.getSet(CoreConst.SYSTEM_IP_PORT_KEY, String.class);
+ String curRequestIp = rpe.getIp();
+ boolean checkFlag = false;
+ for (String ipInfo : ipList) {
+ if (!StringUtils.isEmpty(ipInfo) && ipInfo.contains(":") && curRequestIp.equals(ipInfo.split(":")[0])) {
+ checkFlag = true;
+ break;
+ }
+ }
+ if (!checkFlag) {
+ throw new BaseException(FileCode.CLUSTER_FILE_SYNC_CHECK_FAIL);
+ }
+ Map<Object, Object> otherMap = rpe.getOther();
+ Map<String, File> fileMap = rpe.getFiles();
+ File aimFile = new File(Global.getSystemConfig("local.dir", "") + File.separator + otherMap.get("relativePath"));
+ for (Map.Entry<String, File> entry : fileMap.entrySet()) {
+ File file = entry.getValue();
+ Files.copy(file.toPath(), aimFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
+ }
+ }
+
+ /**
+ * 闆嗙兢鏂囦欢鍚屾鏂规硶-璇锋眰璋冪敤
+ * @param file 鍚屾鐨勬枃浠�
+ * @param fileName 鏂囦欢鍚嶇О锛屼繚瀛樼殑鏂囦欢鍚嶇О锛屽氨鏄椂闂存埑+2浣嶉殢鏈哄瓧绗︿覆
+ * @param relativePath 鐩稿璺緞
+ * @param attachmentUUID 闄勮繎琛╱uid
+ * @param preLogFse 涔嬪墠鐨勬棩蹇梖se
+ */
+ public void clusterFileSyncRequest(File file, String fileName, String relativePath, String attachmentUUID, FieldSetEntity preLogFse) {
+ try {
+ if (file == null || StringUtils.isEmpty(fileName)) {
+ return;
+ }
+ List<String> ipList = RedisUtil.getSet(CoreConst.SYSTEM_IP_PORT_KEY, String.class);
+ String curIpInfo = Global.getSystemConfig(CoreConst.SYSTEM_NAME, "");
+ for (String ipInfo : ipList) {
+ // 鎺掗櫎褰撳墠
+ if (curIpInfo.equals(ipInfo)) {
+ continue;
+ }
+ if (!StringUtils.isEmpty(ipInfo) && ipInfo.contains(":")) {
+ String url = String.format("http://%s/lx/api/fileManager/cluster-file-sync/v1", ipInfo);
+ RequestBody requestBody = new MultipartBody.Builder()
+ .setType(MultipartBody.FORM)
+ // 娣诲姞鏂囦欢瀛楁
+ .addFormDataPart("file", fileName, RequestBody.create(MediaType.parse("application/octet-stream"), file))
+ .addFormDataPart("title", fileName)
+ .addFormDataPart("relativePath", relativePath)
+ .build();
+ JSONObject result = HttpRequestUtil.request(url, "POST", "multipart/form-data", requestBody);
+ SpringMVCContextHolder.getSystemLogger().error("[6ctest]锛�" + result.toString());
+ // 璁板綍鏃ュ織
+ recordClusterSyncFileLog(result, attachmentUUID, curIpInfo, ipInfo, preLogFse);
+ }
+ }
+ } catch (Exception e) {
+ throw new BaseException(FileCode.CLUSTER_FILE_SYNC_FAIL);
+ }
+ }
+ public void clusterFileSyncRequest(File file, String fileName, String relativePath, String attachmentUUID) {
+ clusterFileSyncRequest(file, fileName, relativePath, attachmentUUID, null);
+ }
+
+ /**
+ * 璁板綍闆嗙兢鍚屾鏂囦欢鏃ュ織
+ * @param result 缁撴灉锛�-1-澶辫触锛�1-鎴愬姛锛�2-宸查噸鏂板鐞�
+ * @param attachmentUUID 闄勪欢uuid
+ * @param sourceIpInfo 璇锋眰鍦板潃淇℃伅
+ * @param targetIpInfo 鐩爣鍦板潃淇℃伅
+ * @param preLogFse 涔嬪墠鏃ュ織fse
+ */
+ private void recordClusterSyncFileLog(JSONObject result, String attachmentUUID, String sourceIpInfo, String targetIpInfo, FieldSetEntity preLogFse) {
+ FieldSetEntity logFse = new FieldSetEntity();
+ logFse.setTableName(CmnConst.PRODUCT_SYS_CLUSTER_SYNC_FILE_LOG);
+ if (!"200".equals(result.getString("code"))) {
+ logFse.setValue(CmnConst.ERROR_INFO, result.getString("msg"));
+ logFse.setValue(CmnConst.RESULT, -1);
+ logFse.setValue(CmnConst.NEED_RETRY, 1);
+ } else {
+ logFse.setValue(CmnConst.RESULT, 1);
+ logFse.setValue(CmnConst.NEED_RETRY, -1);
+ }
+ if (!FieldSetEntity.isEmpty(preLogFse)) {
+ logFse.setValue(CmnConst.RETRY_COUNT, preLogFse.getInteger(CmnConst.RETRY_COUNT) == null ? 1 : (preLogFse.getInteger(CmnConst.RETRY_COUNT) + 1));
+ logFse.setValue(CmnConst.PRE_UUID, preLogFse.getUUID());
+ } else {
+ logFse.setValue(CmnConst.RETRY_COUNT, 0);
+ }
+ logFse.setValue(CmnConst.ATTACHMENT_UUID, attachmentUUID);
+ logFse.setValue(CmnConst.SOURCE_INFO, sourceIpInfo);
+ logFse.setValue(CmnConst.TARGET_INFO, targetIpInfo);
+ logFse.setValue(CmnConst.CREATED_UTC_DATETIME, new Date());
+ SystemUser curUser = SpringMVCContextHolder.getCurrentUser();
+ logFse.setValue(CmnConst.CREATED_BY, curUser == null ? -1 : curUser.getUser_id());
+ baseDao.saveFieldSetEntity(logFse);
+ }
+
+ /**
+ * 瀹氭椂浠诲姟瑙﹀彂-鎵弿闆嗙兢鍚屾鏂囦欢鏃ュ織璁板綍琛紝閲嶈瘯鏈揪鏈�澶ф鏁扮殑閿欒鏃ュ織
+ */
+ public void retryClusterSyncFileFailLog() {
+ // 鏈�澶ч噸璇曟鏁�
+ int maxRetryCount = 3;
+ // 褰撳墠鍦板潃淇℃伅
+ String curIpInfo = Global.getSystemConfig(CoreConst.SYSTEM_NAME, "");
+ DataTableEntity waitRetryDte = baseDao.listTable(CmnConst.PRODUCT_SYS_CLUSTER_SYNC_FILE_LOG, "result=-1 AND retry_count<? AND need_retry=1 AND source_info=?", new Object[]{maxRetryCount, curIpInfo});
+ for (int i = 0; i < waitRetryDte.getRows(); i++) {
+ FieldSetEntity waitRetryFse = waitRetryDte.getFieldSetEntity(i);
+
+ FieldSetEntity attachmentFse = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_ATTACHMENTS, waitRetryFse.getString(CmnConst.ATTACHMENT_UUID), false);
+ String fileName = attachmentFse.getString("attachment_title");
+ String relativePath = attachmentFse.getString("attachment_url") + File.separator + fileName;
+ File aimFile = new File(Global.getSystemConfig("local.dir", "") + File.separator + relativePath);
+ clusterFileSyncRequest(aimFile, fileName, relativePath, attachmentFse.getUUID(), waitRetryFse);
+
+ waitRetryFse.setValue(CmnConst.RESULT, 2);
+ waitRetryFse.setValue(CmnConst.NEED_RETRY, -1);
+ baseDao.saveFieldSetEntity(waitRetryFse);
+ }
+ }
+
/**
* 涓婁紶鏂囦欢鍒版湰鍦版湇鍔″櫒
* 绂佹淇敼浠讳綍閫昏緫锛侊紒锛侊紒锛侊紒
@@ -315,7 +448,7 @@
Object value;
String fileNames;
FieldSetEntity fieldFse;
- File tempFile;
+ File tempFile = null;
File localTempFile = null;
long fileLength = 0;
@@ -331,6 +464,7 @@
}
String uuids = "";
+ String fileFinalName = "";
for (Map.Entry<Object, Object> entry : map.entrySet()) {
fieldFse = fieldMetaEntity.getFieldMeta(fieldName);
if (fieldFse == null || !Arrays.asList(CmnConst.ATTACHMENT_TYPE, "file-image", FieldType.FILE_ATTACHMENT.getDictValue()).contains(fieldFse.getString(CmnConst.FIELD_TYPE))) {
@@ -366,86 +500,86 @@
}
boolean saveInDbFlag = FieldType.FILE_ATTACHMENT.getDictValue().equals(fieldFse.getString("field_type"));
- String fileFinalName = "";
if (!saveInDbFlag) {
fileFinalName = FileUtils.uploadFile(tempFile, templateType, clientUuid);
+ } else {
+ fileFinalName = System.currentTimeMillis() + RandomUtil.randomString(2);
}
- ///璇诲彇闄勪欢鏃讹紝鏍规嵁瀛楁绫诲瀷FileAttachment鍒ゆ柇鏄粠鐩綍涓繕鏄暟鎹簱涓幏鍙栨枃浠�
-
-
// 璁板綍闄勪欢淇℃伅鍒版暟鎹簱
- logger.info("姝e湪璁板綍闄勪欢淇℃伅鍒版暟鎹簱...");
- FieldSetEntity dictFse = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DICT,
- new String[]{CmnConst.UUID, CmnConst.DICT_VALUE}, "lower( " + CmnConst.DICT_VALUE + ")=lower(?) and dict_name='upload_file_format' and is_used=1", new Object[]{tail}, false, "");
- FieldSetEntity attachmentFse = new FieldSetEntity();
- attachmentFse.setTableName(CmnConst.PRODUCT_SYS_ATTACHMENTS);
- String fileType;
- if (dictFse != null && !StringUtils.isEmpty(dictFse.getString(CmnConst.UUID))) {
- attachmentFse.setValue(CmnConst.ATTACHMENT_TYPE_UUID, dictFse.getUUID());
- fileType = dictFse.getString(CmnConst.DICT_VALUE);
- } else {
- fileType = tail;
- attachmentFse.setValue(CmnConst.ATTACHMENT_TYPE_UUID, tail);
- }
+ logger.info("姝e湪璁板綍闄勪欢淇℃伅鍒版暟鎹簱...");
+ FieldSetEntity dictFse = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DICT,
+ new String[]{CmnConst.UUID, CmnConst.DICT_VALUE}, "lower( " + CmnConst.DICT_VALUE + ")=lower(?) and dict_name='upload_file_format' and is_used=1", new Object[]{tail}, false, "");
+ FieldSetEntity attachmentFse = new FieldSetEntity();
+ attachmentFse.setTableName(CmnConst.PRODUCT_SYS_ATTACHMENTS);
+ String fileType;
+ if (dictFse != null && !StringUtils.isEmpty(dictFse.getString(CmnConst.UUID))) {
+ attachmentFse.setValue(CmnConst.ATTACHMENT_TYPE_UUID, dictFse.getUUID());
+ fileType = dictFse.getString(CmnConst.DICT_VALUE);
+ } else {
+ fileType = tail;
+ attachmentFse.setValue(CmnConst.ATTACHMENT_TYPE_UUID, tail);
+ }
if (saveInDbFlag) {
// 鍒ゆ柇闄勪欢瀛楁鐨勭被鍨嬩负FileAttachment鏃讹紝瑕佹妸鏂囨。鍐呭鏀惧埌闄勪欢琛ㄤ腑鐨刦ile_content瀛楁涓�
try {
- // todo 6c
-// attachmentFse.setValue(CmnConst.FILE_CONTENT, new FileInputStream(tempFile));
attachmentFse.setValue(CmnConst.FILE_CONTENT, com.product.common.io.FileUtils.readFileToByteArray(tempFile));
} catch (Exception e) {
- throw new RuntimeException("鑾峰彇鏂囦欢娴佸け璐ワ細666");
+ throw new BaseException(FileCode.FILE_TRANSFER_BYTE_ARRAY_FAIL);
}
}
- //鍏佽缂栬緫
- int allowEdit = ("," + Global.getSystemConfig("can.web.online.edit", "doc,docx,xls,xlsx.ppt,pptx,wps,cvs,wps,wpt,et,eet") + ",").indexOf("," + fileType + ",") != -1 ? 1 : 0;
- attachmentFse.setValue(CmnConst.OPT_FLAT, 2);
- attachmentFse.setValue(CmnConst.FILE_NAME, fileName);
- attachmentFse.setValue(CmnConst.ATTACHMENT_TITLE, fileFinalName);
- attachmentFse.setValue(CmnConst.CLIENT_UUID, clientUuid);
- attachmentFse.setValue(CmnConst.VIEW_ONLINE_SIGN, viewOnlineSign);
- attachmentFse.setValue(CmnConst.ATTACHMENT_DATA_TABLE, fse.getTableName());
- attachmentFse.setValue(CmnConst.ATTACHMENT_DATA_FIELD, fieldName);
- attachmentFse.setValue(CmnConst.ATTACHMENT_URL, dir.replaceAll("\\\\", "/"));
- attachmentFse.setValue(CmnConst.ENCRPT_SIGN, Global.getPropertyToBoolean("file.encrypt", "true") ? 1 : 0);
- attachmentFse.setValue(CmnConst.ATTACHMENT_SIZE, fileLength);
- attachmentFse.setValue(CmnConst.UPLOAD_SIGN, needUpload2FileServerFlag ? 1 : 0);
- attachmentFse.setValue(CmnConst.FUNCTION_UUID, fse.getString(CmnConst.FUNCTION_UUID));
- attachmentFse.setValue(CmnConst.ATTACHMENT_CONTAINER, fse.getString(CmnConst.ATTACHMENT_CONTAINER));
- attachmentFse.setValue(CmnConst.ATTACHMENT_DOMAIN, fse.getString(CmnConst.ATTACHMENT_DOMAIN));
- attachmentFse.setValue(CmnConst.MODULE_UUID, fse.getString(CmnConst.MODULE_UUID));
- //luoxin 鏈幏鍙栧綋鍓嶄汉id 灏辩洿鎺ヨ1
- try {
- attachmentFse.setValue(CmnConst.CREATED_BY, SpringMVCContextHolder.getCurrentUser().getUser_id());
- } catch (Exception e) {
- e.getStackTrace();
- attachmentFse.setValue(CmnConst.CREATED_BY, 1);
- }
+ //鍏佽缂栬緫
+ int allowEdit = ("," + Global.getSystemConfig("can.web.online.edit", "doc,docx,xls,xlsx.ppt,pptx,wps,cvs,wps,wpt,et,eet") + ",").indexOf("," + fileType + ",") != -1 ? 1 : 0;
+ attachmentFse.setValue(CmnConst.OPT_FLAT, 2);
+ attachmentFse.setValue(CmnConst.FILE_NAME, fileName);
+ attachmentFse.setValue(CmnConst.ATTACHMENT_TITLE, fileFinalName);
+ attachmentFse.setValue(CmnConst.CLIENT_UUID, clientUuid);
+ attachmentFse.setValue(CmnConst.VIEW_ONLINE_SIGN, viewOnlineSign);
+ attachmentFse.setValue(CmnConst.ATTACHMENT_DATA_TABLE, fse.getTableName());
+ attachmentFse.setValue(CmnConst.ATTACHMENT_DATA_FIELD, fieldName);
+ attachmentFse.setValue(CmnConst.ATTACHMENT_URL, dir.replaceAll("\\\\", "/"));
+ attachmentFse.setValue(CmnConst.ENCRPT_SIGN, Global.getPropertyToBoolean("file.encrypt", "true") ? 1 : 0);
+ attachmentFse.setValue(CmnConst.ATTACHMENT_SIZE, fileLength);
+ attachmentFse.setValue(CmnConst.UPLOAD_SIGN, needUpload2FileServerFlag ? 1 : 0);
+ attachmentFse.setValue(CmnConst.FUNCTION_UUID, fse.getString(CmnConst.FUNCTION_UUID));
+ attachmentFse.setValue(CmnConst.ATTACHMENT_CONTAINER, fse.getString(CmnConst.ATTACHMENT_CONTAINER));
+ attachmentFse.setValue(CmnConst.ATTACHMENT_DOMAIN, fse.getString(CmnConst.ATTACHMENT_DOMAIN));
+ attachmentFse.setValue(CmnConst.MODULE_UUID, fse.getString(CmnConst.MODULE_UUID));
+ //luoxin 鏈幏鍙栧綋鍓嶄汉id 灏辩洿鎺ヨ1
+ try {
+ attachmentFse.setValue(CmnConst.CREATED_BY, SpringMVCContextHolder.getCurrentUser().getUser_id());
+ } catch (Exception e) {
+ e.getStackTrace();
+ attachmentFse.setValue(CmnConst.CREATED_BY, 1);
+ }
- attachmentFse.setValue(CmnConst.CREATED_UTC_DATETIME, new Date());
- baseDao.saveFieldSetEntity(attachmentFse);
- logger.info("璁板綍鎴愬姛");
- String uuid = attachmentFse.getUUID();
- FieldSetEntity fseIndex = new FieldSetEntity();
- fseIndex.setTableName("fseIndex");
- fseIndex.setValue("function_uuid", fse.getString("function_uuid"));
- fseIndex.setValue("attachment_uuid", uuid);
- CreateDocumentIndexThread.getInstance().appendAttaInfo(fseIndex);
- fse.setValue(uuid, fileName);
- fse.setValue(entry.getKey().toString(), uuid);
- fse.setValue(entry.getKey().toString() + "_edit", allowEdit);
- fse.setValue(entry.getKey().toString() + "_type", fileType);
- if (!StringUtils.isEmpty(uuids)) {
- uuids += ",";
- }
- uuids += uuid;
+ attachmentFse.setValue(CmnConst.CREATED_UTC_DATETIME, new Date());
+ baseDao.saveFieldSetEntity(attachmentFse);
+ logger.info("璁板綍鎴愬姛");
+ String uuid = attachmentFse.getUUID();
+ FieldSetEntity fseIndex = new FieldSetEntity();
+ fseIndex.setTableName("fseIndex");
+ fseIndex.setValue("function_uuid", fse.getString("function_uuid"));
+ fseIndex.setValue("attachment_uuid", uuid);
+ CreateDocumentIndexThread.getInstance().appendAttaInfo(fseIndex);
+ fse.setValue(uuid, fileName);
+ fse.setValue(entry.getKey().toString(), uuid);
+ fse.setValue(entry.getKey().toString() + "_edit", allowEdit);
+ fse.setValue(entry.getKey().toString() + "_type", fileType);
+ if (!StringUtils.isEmpty(uuids)) {
+ uuids += ",";
+ }
+ uuids += uuid;
+
+ // 闆嗙兢甯冪讲鏈湴瀛樺偍鏃讹紝闄勪欢淇℃伅瑕佸悓姝ュ埌鍏跺畠鏈嶅姟鍣ㄤ笂
+ if (!saveInDbFlag && !needUpload2FileServerFlag) {
+ File curFile = new File(Global.getSystemConfig("local.dir", "") + File.separator + dir + File.separator + fileFinalName);
+ clusterFileSyncRequest(curFile, fileFinalName, dir + File.separator + fileFinalName, attachmentFse.getUUID());
+ }
}
logger.info("姝e湪鍥炲啓uuid...");
System.out.println(uuids);
fse.setValue(fieldName, uuids);
-
- // todo 闆嗙兢甯冪讲鏃讹紝闄勪欢淇℃伅瑕佸悓姝ュ埌鍏跺畠鏈嶅姟鍣ㄤ笂
}
return fse;
}
@@ -718,14 +852,18 @@
localTempFile.delete();
}
} else {
- InputStream is;
+ InputStream is = null;
boolean delete = false;
File file = null;
- long fileLength = 0;
- if (StringUtils.isEmpty(attachmentFse.getString("attachment_title"))) {
- // todo 6c
- is = new ByteArrayInputStream((byte[]) attachmentFse.getValue("file_content"));
- } else {
+ long fileLength = 0L;
+ Object fileContent = attachmentFse.getValue("file_content");
+ // 鏄惁瀛樺偍鍒版暟鎹簱
+ boolean saveInDb = fileContent != null;
+ if (saveInDb) {
+ is = (InputStream) fileContent;
+ fileLength = attachmentFse.getLong("attachment_size");
+ }
+ if (fileContent == null || needOnlineViewFlag) {
// 鐩存帴鍦ㄦ湰鍦扮殑鐩綍涓壘鏂囦欢
logger.info("鐩存帴鍦ㄦ湰鍦扮殑鐩綍涓壘鏂囦欢...");
String localBasePath = Global.getSystemConfig("local.dir", "");
@@ -744,6 +882,13 @@
}
if (needOnlineViewFlag && !file.exists()) {
// 鑻ユ槸棰勮锛屼絾鏄浆鎹㈠悗鐨勬枃浠朵笉瀛樺湪锛岄偅涔堥噸鏂版墽琛岃浆鎹㈡搷浣�
+ // 鑻ユ槸瀛樺偍鍒版暟鎹簱鐨勶紝閭d箞鍏堟煡鐪嬫湰鍦版槸鍚﹀瓨鍦紝鑻ユ槸涓嶅瓨鍦紝閭d箞瀛樹竴浠藉埌鏈湴
+ if (saveInDb) {
+ File localFile = new File(Global.getSystemConfig("local.dir", "") + File.separator + attachmentFse.getString(CmnConst.ATTACHMENT_URL) + File.separator + fileName);
+ if (!localFile.exists()) {
+ Files.copy(is, localFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
+ }
+ }
File sourceFile = fileUtils.getFile(false, attachmentFse.getString(CmnConst.ATTACHMENT_URL), fileName, encrptSignFlag);
File tempSourceFile = new File(sourceFile.getParentFile().getAbsolutePath() + File.separator + attachmentFse.getString(CmnConst.FILE_NAME));
sourceFile.renameTo(tempSourceFile);
@@ -764,15 +909,17 @@
is = Files.newInputStream(file.toPath());
fileLength = file.length();
}
+
int len;
byte[] b = new byte[1024];
response.setHeader("Access-Control-Expose-Headers", "*");
+ response.setContentType("application/octet-stream");
response.setContentType(contentType);
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFileName, "UTF-8"));
response.setContentLengthLong(fileLength);
- try (ServletOutputStream os = response.getOutputStream()) {
- while ((len = is.read(b)) > 0) {
+ try (ServletOutputStream os = response.getOutputStream()) {
+ while ((len = is.read(b)) != -1) {
if (encrptSignFlag) {
// 闇�瑕佽В瀵�
logger.info("闇�瑕佽В瀵�...");
@@ -877,13 +1024,22 @@
ftpService.downloadFile(path, os);
}
} else {
- // 鐩存帴鍦ㄦ湰鍦扮殑鐩綍涓壘鏂囦欢
- String localBasePath = Global.getSystemConfig("local.dir", "");
- path = localBasePath + File.separator + path;
- File file = new File(path);
- int len;
- byte[] b = new byte[1024];
- try (InputStream is = new FileInputStream(file)) {
+ InputStream is = null;
+ try {
+ Object fileContent = attachmentFse.getValue("file_content");
+ boolean saveInDb = fileContent != null;
+ if (saveInDb) {
+ // 瀛樺偍鍒版暟鎹簱
+ is = (InputStream) fileContent;
+ } else {
+ // 鐩存帴鍦ㄦ湰鍦扮殑鐩綍涓壘鏂囦欢
+ String localBasePath = Global.getSystemConfig("local.dir", "");
+ path = localBasePath + File.separator + path;
+ File file = new File(path);
+ is = Files.newInputStream(file.toPath());
+ }
+ int len;
+ byte[] b = new byte[1024];
while ((len = is.read(b)) > 0) {
if (Global.getPropertyToBoolean("file.encrypt", "true")) {
// 闇�瑕佽В瀵�
@@ -893,7 +1049,13 @@
os.write(b, 0, len);
}
}
- }
+ } catch (Exception e) {
+ throw new BaseException(FileCode.GET_FILE_BYTES_FAIL);
+ } finally {
+ if (is != null) {
+ is.close();
+ }
+ }
}
return os.toByteArray();
--
Gitblit v1.9.2