From 42ccf1da495016bf4574f631faad41f586613df9 Mon Sep 17 00:00:00 2001
From: shicf <shi_chongfu@163.com>
Date: 星期三, 15 十月 2025 09:32:18 +0800
Subject: [PATCH] 附件支持存放数据库,读取从数据库获取
---
src/main/java/com/product/file/service/FileManagerService.java | 321 ++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 293 insertions(+), 28 deletions(-)
diff --git a/src/main/java/com/product/file/service/FileManagerService.java b/src/main/java/com/product/file/service/FileManagerService.java
index c66be37..2e15c93 100644
--- a/src/main/java/com/product/file/service/FileManagerService.java
+++ b/src/main/java/com/product/file/service/FileManagerService.java
@@ -1,9 +1,11 @@
package com.product.file.service;
+import cn.hutool.core.date.DateUtil;
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.config.CoreConst;
import com.product.core.config.Global;
import com.product.core.connection.ConnectionManager;
import com.product.core.dao.BaseDao;
@@ -16,19 +18,19 @@
import com.product.core.spring.context.SpringMVCContextHolder;
import com.product.file.config.CmnConst;
import com.product.file.config.FileCode;
+import com.product.file.util.AsposeUtil;
import com.product.file.util.CreateDocumentIndexThread;
import com.product.file.util.FileUtil;
import com.product.file.util.FileUtils;
import com.product.module.sys.entity.SystemUser;
+import com.product.util.BaseUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
+import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -49,6 +51,15 @@
public BaseDao baseDao;
@Autowired
FileUtils fileUtils;
+
+ /**
+ * 鏍囪鏂囦欢宸茶淇敼
+ * @param uuid
+ * @param userId
+ */
+ public void signUpdateAttachment(String uuid, int userId) {
+ baseDao.executeUpdate("UPDATE product_sys_attachments SET updated_by = ?, updated_utc_datetime = NOW() WHERE uuid = ?", new Object[] {userId, uuid});
+ }
/**
* 鑾峰彇闈欐�佽祫婧�
@@ -231,6 +242,39 @@
return baseDao.executeUpdate(sql.toString());
}
+ /**
+ * 鏍规嵁闄勪欢uuid鍒ゆ柇鏂囦欢鏄惁瀛樺湪
+ *
+ * @param uuid
+ * @return
+ */
+ public boolean fileExist(String uuid) {
+ if (StringUtils.isEmpty(uuid)) {
+ return false;
+ }
+ FieldSetEntity attachmentFse = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_ATTACHMENTS, uuid, false);
+ if (attachmentFse == null) {
+ return false;
+ }
+
+ //鍒ゆ柇鏂囦欢瀛樻斁鍦ㄦ湇鍔″櫒杩樻槸鏈湴
+ boolean needDownloadFromServerFlag = "1".equals(attachmentFse.getString(CmnConst.UPLOAD_SIGN));
+ String dir = attachmentFse.getString(CmnConst.ATTACHMENT_URL);
+ String fileName = attachmentFse.getString(CmnConst.ATTACHMENT_TITLE);
+ boolean encrptSignFlag = "1".equals(attachmentFse.getString(CmnConst.ENCRPT_SIGN));
+
+ if (needDownloadFromServerFlag) {
+ // 闇�瑕佷粠闄勪欢鏈嶅姟鍣ㄤ笂鍙栨枃浠�
+ FTPService ftpService = new FTPService();
+ return ftpService.fileIsExist(dir, fileName);
+ } else {
+ // 鐩存帴鍦ㄦ湰鍦扮殑鐩綍涓壘鏂囦欢
+ String localBasePath = Global.getSystemConfig("local.dir", "");
+ String path = localBasePath + File.separator + dir + File.separator + fileName;
+ File file = new File(path);
+ return file.isFile();
+ }
+ }
/**
* 涓婁紶鏂囦欢鍒版湰鍦版湇鍔″櫒
@@ -285,7 +329,7 @@
String uuids = "";
for (Map.Entry<Object, Object> entry : map.entrySet()) {
fieldFse = fieldMetaEntity.getFieldMeta(fieldName);
- if (fieldFse == null || !CmnConst.ATTACHMENT_TYPE.equals(fieldFse.getString(CmnConst.FIELD_TYPE))) {
+ if (fieldFse == null || (!CmnConst.ATTACHMENT_TYPE.equals(fieldFse.getString(CmnConst.FIELD_TYPE)) && !"file-image".equals(fieldFse.getString(CmnConst.FIELD_TYPE)))) {
fse.setValue(entry.getKey().toString(), null);
continue;
}
@@ -317,9 +361,17 @@
}
}
-
+
final String fileFinalName = FileUtils.uploadFile(tempFile, templateType, clientUuid);
-
+ ///鍒ゆ柇闄勪欢瀛楁鐨勭被鍨嬩负FileAttachment鏃讹紝瑕佹妸鏂囨。鍐呭鏀惧埌闄勪欢琛ㄤ腑鐨刦ile_content瀛楁涓�
+
+ ///璇诲彇闄勪欢鏃讹紝鏍规嵁瀛楁绫诲瀷FileAttachment鍒ゆ柇鏄粠鐩綍涓繕鏄暟鎹簱涓幏鍙栨枃浠�
+
+ //寰呮敼......
+ //闆嗙兢甯冪讲鏃讹紝闄勪欢淇℃伅瑕佸悓姝ュ埌鍏跺畠鏈嶅姟鍣ㄤ笂
+ //寰呮敼
+
+
// 璁板綍闄勪欢淇℃伅鍒版暟鎹簱
logger.info("姝e湪璁板綍闄勪欢淇℃伅鍒版暟鎹簱...");
FieldSetEntity dictFse = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DICT,
@@ -347,7 +399,7 @@
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));
@@ -385,6 +437,174 @@
}
/**
+ * 鏍规嵁闄勪欢琛ㄦ暟鎹敓鎴愭枃妗g储寮�
+ */
+ public void readAttachmentCreateIndex() {
+ // 閬嶅巻闄勪欢琛�
+ DataTableEntity dtAttachment = baseDao.listTable(CmnConst.PRODUCT_SYS_ATTACHMENTS);
+ if (BaseUtil.dataTableIsEmpty(dtAttachment)) {
+ return;
+ }
+ for (int i = 0; i < dtAttachment.getRows(); i++) {
+ // 鑾峰彇闄勪欢淇℃伅锛屽苟鍒ゆ柇鏄惁鏈夎〃鍜屽瓧娈�
+ FieldSetEntity fseAttachment = dtAttachment.getFieldSetEntity(i);
+ if (BaseUtil.strIsNull(fseAttachment.getString("attachment_data_field")) || BaseUtil.strIsNull(fseAttachment.getString("attachment_data_field"))) {
+ continue;
+ }
+ // 鏌ヨ鍘熸暟鎹紝鏈夊師鏁版嵁鍐嶇敓鎴愭枃妗f绱�
+ FieldSetEntity fseRecord = baseDao.getFieldSetEntityByFilter(fseAttachment.getString("attachment_data_table"), fseAttachment.getString("attachment_data_field") + " LIKE ?", new Object[]{"%" + fseAttachment.getUUID() + "%"}, false);
+ if (fseRecord != null) {
+ // 鐢熸垚鏂囨。妫�绱俊鎭�
+ FieldSetEntity fseIndex = new FieldSetEntity();
+ fseIndex.setTableName("fseIndex");
+ fseIndex.setValue("function_uuid", fseAttachment.getString("function_uuid"));
+ fseIndex.setValue("attachment_uuid", fseAttachment.getUUID());
+ CreateDocumentIndexThread.getInstance().appendAttaInfo(fseIndex);
+ }
+ }
+ }
+
+ /**
+ * 绉诲姩绔崌绾э紝瀹夎鍖呬笅杞�
+ *
+ * @param fse
+ * @param response
+ */
+ public void getFileContent(FieldSetEntity fse, HttpServletResponse response, boolean isUpgrade) throws IOException {
+ if (isUpgrade) {
+ FieldSetEntity attachmentFse = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_ATTACHMENTS, fse.getUUID(), false);
+ if (attachmentFse == null || !"product_sys_app_version".equals(attachmentFse.getString("attachment_data_table"))) {
+ return;
+ }
+ logger.info("姝e湪鑾峰彇鏂囦欢娴�...");
+ boolean needDownloadFromServerFlag = "1".equals(attachmentFse.getString(CmnConst.UPLOAD_SIGN));
+ String dir = attachmentFse.getString(CmnConst.ATTACHMENT_URL);
+ String fileName = attachmentFse.getString(CmnConst.ATTACHMENT_TITLE);
+ //鐪熷疄鏂囦欢鍚�
+ String realFileName = attachmentFse.getString(CmnConst.FILE_NAME);
+ String viewOnlineSign = attachmentFse.getString(CmnConst.VIEW_ONLINE_SIGN);
+ boolean encrptSignFlag = "1".equals(attachmentFse.getString(CmnConst.ENCRPT_SIGN));
+ boolean needOnlineViewFlag = "1".equals(fse.getString(CmnConst.NEED_ONLINE_VIEW)) && "1".equals(viewOnlineSign);
+
+ String clientType = CoreConst.CLIENT_TYPE_APP;
+
+ String contentType = "multipart/form-data";
+ boolean isExcel = realFileName.endsWith(".xlsx") || realFileName.endsWith(".xls");
+ if (needOnlineViewFlag) {
+ //鐗规畩澶勭悊锛� 濡傛灉瀹㈡埛绔笉鏄疉pp 浣嗛瑙堢殑鏂囦欢鏄疎xcel 鐩存帴杩斿洖excel婧愭枃浠� content澶存爣璇嗘槸excel cheng 2025骞�2鏈�11鏃�10:41:41
+ if (isExcel && !CoreConst.CLIENT_TYPE_APP.equals(clientType)) {
+ contentType = "application/vnd.ms-excel";
+ } else {
+ dir += File.separator + CmnConst.TRANSFER_DIR_NAME;
+ }
+ }
+
+ String path = dir + File.separator + fileName;
+ if (needDownloadFromServerFlag) {
+ // 闇�瑕佷粠闄勪欢鏈嶅姟鍣ㄤ笂鍙栨枃浠�
+ FTPService ftpService = new FTPService();
+ logger.info("闇�瑕佷粠闄勪欢鏈嶅姟鍣ㄤ笂鍙栨枃浠�...");
+ response.setHeader("Access-Control-Expose-Headers", "*");
+
+ response.setContentType(contentType);
+ response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFileName, "UTF-8"));
+ //璁剧疆澶翠腑鐨勬枃浠剁被鍨�
+ if (!needOnlineViewFlag && !encrptSignFlag) {
+ logger.info("涓嶉渶瑕佽В瀵嗕笖鑾峰彇鍘熸枃浠�...");
+ try (ServletOutputStream os = response.getOutputStream()) {
+ ftpService.downloadFile(path, os);
+ }
+ } else {
+ logger.info("闇�瑕佽В瀵嗘垨鑰呰幏鍙栬浆鎹㈠悗鐨勬枃浠�...");
+ String localTempPath = Global.getSystemConfig("temp.dir", "") + File.separator + fileName;
+ File localTempFile = new File(localTempPath);
+ OutputStream tempOs = new FileOutputStream(localTempFile);
+ ftpService.downloadFile(path, tempOs);
+ tempOs.flush();
+ tempOs.close();
+ if (needOnlineViewFlag && localTempFile.length() == 0L) {
+ // 鑻ユ槸棰勮锛屼絾鏄浆鎹㈠悗鐨勬枃浠朵笉瀛樺湪锛岄偅涔堥噸鏂版墽琛岃浆鎹㈡搷浣�
+ File sourceFile = fileUtils.getFile(true, attachmentFse.getString(CmnConst.ATTACHMENT_URL), fileName, encrptSignFlag);
+ File tempSourceFile = new File(sourceFile.getParentFile().getAbsolutePath() + File.separator + attachmentFse.getString(CmnConst.FILE_NAME));
+ sourceFile.renameTo(tempSourceFile);
+ FileUtils.convertPdf(false, true, encrptSignFlag, true, tempSourceFile, dir, fileName, attachmentFse.getString(CmnConst.FILE_NAME));
+ tempSourceFile.delete();
+
+ // 閲嶆柊鎷夋枃浠�
+ tempOs = new FileOutputStream(localTempFile);
+ ftpService = new FTPService();
+ ftpService.downloadFile(path, tempOs);
+ tempOs.flush();
+ tempOs.close();
+ }
+ response.setContentLengthLong(localTempFile.length());
+ InputStream is = new FileInputStream(localTempFile);
+ int len;
+ byte[] b = new byte[1024];
+ try (ServletOutputStream os = response.getOutputStream()) {
+ while ((len = is.read(b)) > 0) {
+ os.write(encrptSignFlag ? FileUtil.decryption(b) : b, 0, len);
+ }
+ os.flush();
+ is.close();
+ }
+ // 鍒犻櫎涓存椂鏂囦欢
+ localTempFile.delete();
+ }
+ } else {
+ // 鐩存帴鍦ㄦ湰鍦扮殑鐩綍涓壘鏂囦欢
+ logger.info("鐩存帴鍦ㄦ湰鍦扮殑鐩綍涓壘鏂囦欢...");
+ String localBasePath = Global.getSystemConfig("local.dir", "");
+ path = localBasePath + File.separator + path;
+ File file = new File(path);
+ if (needOnlineViewFlag && file.exists() && CoreConst.CLIENT_TYPE_APP.equals(clientType)) {
+ //鐗规畩澶勭悊锛� 鏄疉pp 浣嗛瑙堢殑鏂囦欢鏄疎xcel 闇�瑕佸皢涔嬪墠宸茶浆鎹负鐨勬枃浠跺垹闄ゆ帀閲嶆柊杞崲锛堝洜杞崲鍚庣殑鏍煎紡涓嶆槸pdf)
+ String changeTime = "2025-02-11 23:59:59";
+ Date changeDate = DateUtil.parse(changeTime, "yyyy-MM-dd HH:mm:ss");
+ long fileTime = file.lastModified();
+ //濡傛灉鏃堕棿鏄� 2025骞�2鏈�10鏃�23:59:59锛岄偅涔堝氨閲嶆柊杞崲
+ //鍒犻櫎鏂囦欢
+ if (fileTime <= changeDate.getTime()) {
+ file.delete();
+ }
+ }
+ if (needOnlineViewFlag && !file.exists()) {
+ // 鑻ユ槸棰勮锛屼絾鏄浆鎹㈠悗鐨勬枃浠朵笉瀛樺湪锛岄偅涔堥噸鏂版墽琛岃浆鎹㈡搷浣�
+ 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);
+ FileUtils.convertPdf(false, false, encrptSignFlag, true, tempSourceFile, dir, fileName, attachmentFse.getString(CmnConst.FILE_NAME));
+ tempSourceFile.delete();
+ }
+ int len;
+ byte[] b = new byte[1024];
+ InputStream is = new FileInputStream(file);
+ response.setHeader("Access-Control-Expose-Headers", "*");
+
+ response.setContentType(contentType);
+ response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFileName, "UTF-8"));
+ response.setContentLengthLong(file.length());
+ try (ServletOutputStream os = response.getOutputStream()) {
+ while ((len = is.read(b)) > 0) {
+ if (encrptSignFlag) {
+ // 闇�瑕佽В瀵�
+ logger.info("闇�瑕佽В瀵�...");
+ os.write(FileUtil.decryption(b), 0, len);
+ } else {
+ // 鏃犻渶瑙e瘑
+ os.write(b, 0, len);
+ }
+ }
+ os.flush();
+ }
+ is.close();
+ }
+ logger.info("鏂囦欢娴佽幏鍙栨垚鍔�");
+ }
+
+ }
+
+ /**
* 鎻愬彇鏂囦欢淇℃伅-涓嬭浇鏂囦欢鎴栬�呭湪绾块瑙堟枃浠�
*
* @param fse
@@ -400,31 +620,34 @@
boolean needDownloadFromServerFlag = "1".equals(attachmentFse.getString(CmnConst.UPLOAD_SIGN));
String dir = attachmentFse.getString(CmnConst.ATTACHMENT_URL);
String fileName = attachmentFse.getString(CmnConst.ATTACHMENT_TITLE);
+ //鐪熷疄鏂囦欢鍚�
+ String realFileName = attachmentFse.getString(CmnConst.FILE_NAME);
String viewOnlineSign = attachmentFse.getString(CmnConst.VIEW_ONLINE_SIGN);
boolean encrptSignFlag = "1".equals(attachmentFse.getString(CmnConst.ENCRPT_SIGN));
boolean needOnlineViewFlag = "1".equals(fse.getString(CmnConst.NEED_ONLINE_VIEW)) && "1".equals(viewOnlineSign);
+ String clientType = SpringMVCContextHolder.getCurrentUser().getClientType();
+
+ String contentType = "multipart/form-data";
+ boolean isExcel = realFileName.endsWith(".xlsx") || realFileName.endsWith(".xls");
if (needOnlineViewFlag) {
- // 闇�瑕佸湪绾块瑙堜笖杞崲涔嬪悗鎵嶈兘鍦ㄧ嚎棰勮
- dir += File.separator + CmnConst.TRANSFER_DIR_NAME;
+ //鐗规畩澶勭悊锛� 濡傛灉瀹㈡埛绔笉鏄疉pp 浣嗛瑙堢殑鏂囦欢鏄疎xcel 鐩存帴杩斿洖excel婧愭枃浠� content澶存爣璇嗘槸excel cheng 2025骞�2鏈�11鏃�10:41:41
+ if (isExcel && !CoreConst.CLIENT_TYPE_APP.equals(clientType)) {
+ contentType = "application/vnd.ms-excel";
+ } else {
+ dir += File.separator + CmnConst.TRANSFER_DIR_NAME;
+ }
}
- HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
- String userAgent = request.getHeader("User-Agent");
- String file_name = attachmentFse.getString("file_name");
- if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
- file_name = java.net.URLEncoder.encode(file_name, "UTF-8");
- } else {
- // 闈濱E娴忚鍣ㄧ殑澶勭悊锛�
- file_name = new String(file_name.getBytes("UTF-8"), "ISO-8859-1");
- }
String path = dir + File.separator + fileName;
if (needDownloadFromServerFlag) {
// 闇�瑕佷粠闄勪欢鏈嶅姟鍣ㄤ笂鍙栨枃浠�
FTPService ftpService = new FTPService();
logger.info("闇�瑕佷粠闄勪欢鏈嶅姟鍣ㄤ笂鍙栨枃浠�...");
- response.setContentType("multipart/form-data");
- response.setHeader("Content-disposition",
- String.format("attachment; filename=\"%s\"", file_name));
+ response.setHeader("Access-Control-Expose-Headers", "*");
+
+ response.setContentType(contentType);
+ response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFileName, "UTF-8"));
+ //璁剧疆澶翠腑鐨勬枃浠剁被鍨�
if (!needOnlineViewFlag && !encrptSignFlag) {
logger.info("涓嶉渶瑕佽В瀵嗕笖鑾峰彇鍘熸枃浠�...");
try (ServletOutputStream os = response.getOutputStream()) {
@@ -453,6 +676,19 @@
tempOs.flush();
tempOs.close();
}
+ boolean delete = false;
+ if (realFileName.endsWith(".xls") && needOnlineViewFlag && localTempFile.exists() && !CoreConst.CLIENT_TYPE_APP.equals(clientType)) {
+ //杞崲涓簒lsx
+ AsposeUtil.xls2xlsx(localTempFile.getPath(), getSystemConfig("temp.dir", "/attachment/temp") + "/" + localTempFile.getName(), "xls");
+ File oldFile = localTempFile;
+ localTempFile = new File(getSystemConfig("temp.dir", "/attachment/temp") + "/" + localTempFile.getName());
+ if (!localTempFile.isFile()) {
+ localTempFile = oldFile;
+ } else {
+ delete = true;
+ oldFile.delete();
+ }
+ }
response.setContentLengthLong(localTempFile.length());
InputStream is = new FileInputStream(localTempFile);
int len;
@@ -473,6 +709,17 @@
String localBasePath = Global.getSystemConfig("local.dir", "");
path = localBasePath + File.separator + path;
File file = new File(path);
+ if (needOnlineViewFlag && file.exists() && CoreConst.CLIENT_TYPE_APP.equals(clientType)) {
+ //鐗规畩澶勭悊锛� 鏄疉pp 浣嗛瑙堢殑鏂囦欢鏄疎xcel 闇�瑕佸皢涔嬪墠宸茶浆鎹负鐨勬枃浠跺垹闄ゆ帀閲嶆柊杞崲锛堝洜杞崲鍚庣殑鏍煎紡涓嶆槸pdf)
+ String changeTime = "2025-02-11 23:59:59";
+ Date changeDate = DateUtil.parse(changeTime, "yyyy-MM-dd HH:mm:ss");
+ long fileTime = file.lastModified();
+ //濡傛灉鏃堕棿鏄� 2025骞�2鏈�10鏃�23:59:59锛岄偅涔堝氨閲嶆柊杞崲
+ //鍒犻櫎鏂囦欢
+ if (fileTime <= changeDate.getTime()) {
+ file.delete();
+ }
+ }
if (needOnlineViewFlag && !file.exists()) {
// 鑻ユ槸棰勮锛屼絾鏄浆鎹㈠悗鐨勬枃浠朵笉瀛樺湪锛岄偅涔堥噸鏂版墽琛岃浆鎹㈡搷浣�
File sourceFile = fileUtils.getFile(false, attachmentFse.getString(CmnConst.ATTACHMENT_URL), fileName, encrptSignFlag);
@@ -481,11 +728,25 @@
FileUtils.convertPdf(false, false, encrptSignFlag, true, tempSourceFile, dir, fileName, attachmentFse.getString(CmnConst.FILE_NAME));
tempSourceFile.delete();
}
+ boolean delete = false;
+ if (realFileName.endsWith(".xls") && needOnlineViewFlag && file.exists() && !CoreConst.CLIENT_TYPE_APP.equals(clientType)) {
+ //杞崲涓簒lsx
+ AsposeUtil.xls2xlsx(file.getPath(), getSystemConfig("temp.dir", "/attachment/temp") + "/" + file.getName(), "xls");
+ File oldFile = file;
+ file = new File(getSystemConfig("temp.dir", "/attachment/temp") + "/" + file.getName());
+ if (!file.isFile()) {
+ file = oldFile;
+ } else {
+ delete = true;
+ }
+ }
int len;
byte[] b = new byte[1024];
- response.setContentType("multipart/form-data");
InputStream is = new FileInputStream(file);
- response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", file_name));
+ response.setHeader("Access-Control-Expose-Headers", "*");
+
+ response.setContentType(contentType);
+ response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFileName, "UTF-8"));
response.setContentLengthLong(file.length());
try (ServletOutputStream os = response.getOutputStream()) {
while ((len = is.read(b)) > 0) {
@@ -500,7 +761,10 @@
}
os.flush();
}
-
+ is.close();
+ if (delete) {
+ file.delete();
+ }
}
logger.info("鏂囦欢娴佽幏鍙栨垚鍔�");
}
@@ -537,7 +801,7 @@
try {
temp.createNewFile();
} catch (IOException e) {
- throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText() + (e.getMessage() != null ? e.getMessage() : ""));
+ throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText() + (e.getMessage() != null ? e.getMessage() + ",uuid:" + attachmentFse.getUUID() : ""));
}
try (FileOutputStream fos = new FileOutputStream(temp); BufferedOutputStream out = new BufferedOutputStream(fos)) {
@@ -545,10 +809,10 @@
return temp;
} catch (Exception e) {
e.printStackTrace();
- throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText() + (e.getMessage() != null ? e.getMessage() : ""));
+ throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText() + (e.getMessage() != null ? e.getMessage() + ",uuid:" + attachmentFse.getUUID() : ""));
}
}
- throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText());
+ throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText() + ",uuid:" + attachmentFse.getUUID());
}
/**
@@ -556,7 +820,8 @@
*/
public byte[] getFileContent(FieldSetEntity attachmentFse) throws BaseException {
if (attachmentFse == null || !CmnConst.PRODUCT_SYS_ATTACHMENTS.equals(attachmentFse.getTableName())) {
- return new byte[16];
+ //杩斿洖涓�涓┖鐨勫瓧鑺傛暟缁�
+ return new byte[0];
}
try (ByteArrayOutputStream os = new ByteArrayOutputStream();) {
FTPService ftpService = new FTPService();
--
Gitblit v1.9.2