| | |
| | | */ |
| | | @Component |
| | | public class FileUtils { |
| | | @Autowired |
| | | BaseDao baseDao; |
| | | @Autowired |
| | | BaseDao baseDao; |
| | | |
| | | /** |
| | | * 文件是否存在 |
| | | * |
| | | * @param dir |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | | public boolean fileIsExist(String dir, String fileName) { |
| | | return fileIsExist(true, dir, fileName); |
| | | } |
| | | /** |
| | | * 文件是否存在 |
| | | * |
| | | * @param dir |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | | public boolean fileIsExist(String dir, String fileName) { |
| | | return fileIsExist(true, dir, fileName); |
| | | } |
| | | |
| | | /** |
| | | * 删除文件服务器上的文件 |
| | | * |
| | | * @param dir |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | | public boolean deleteFilesServerOnFile(String dir, String fileName) { |
| | | SystemUser currentUser = SpringMVCContextHolder.getCurrentUser(); |
| | | if (currentUser == null || StringUtils.isEmpty(currentUser.getToken_info())) { |
| | | return false; |
| | | } |
| | | return FTPService.needUpload2FileServer() && new FTPService().deleteFile(dir, fileName); |
| | | } |
| | | /** |
| | | * 删除文件服务器上的文件 |
| | | * |
| | | * @param dir |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | | public boolean deleteFilesServerOnFile(String dir, String fileName) { |
| | | SystemUser currentUser = SpringMVCContextHolder.getCurrentUser(); |
| | | if (currentUser == null || StringUtils.isEmpty(currentUser.getToken_info())) { |
| | | return false; |
| | | } |
| | | return FTPService.needUpload2FileServer() && new FTPService().deleteFile(dir, fileName); |
| | | } |
| | | |
| | | /** |
| | | * 文件是否存在 |
| | | * |
| | | * @param isServer 是否文件服务器 |
| | | * @param dir |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | | public boolean fileIsExist(boolean isServer, String dir, String fileName) { |
| | | if (isServer && FTPService.needUpload2FileServer()) { |
| | | FTPService ftpService = new FTPService(); |
| | | return ftpService.fileIsExist(dir, fileName); |
| | | } else { |
| | | return new File(Global.getSystemConfig("local.dir", "") + "/" + dir + "/" + fileName).isFile(); |
| | | } |
| | | } |
| | | /** |
| | | * 文件是否存在 |
| | | * |
| | | * @param isServer 是否文件服务器 |
| | | * @param dir |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | | public boolean fileIsExist(boolean isServer, String dir, String fileName) { |
| | | if (isServer && FTPService.needUpload2FileServer()) { |
| | | FTPService ftpService = new FTPService(); |
| | | return ftpService.fileIsExist(dir, fileName); |
| | | } else { |
| | | return new File(Global.getSystemConfig("local.dir", "") + "/" + dir + "/" + fileName).isFile(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 根据文件记录表uuid 获取文件的字节 |
| | | * |
| | | * @param uuid |
| | | * @return |
| | | * @throws BaseException |
| | | */ |
| | | public byte[] getFileByte(String uuid) throws BaseException { |
| | | File file = getFile(uuid, false); |
| | | if (file == null || !file.isFile()) { |
| | | return null; |
| | | } |
| | | byte[] bytes = cn.hutool.core.io.FileUtil.readBytes(file); |
| | | file.delete(); |
| | | return bytes; |
| | | } |
| | | /** |
| | | * 根据文件记录表uuid 获取文件的字节 |
| | | * |
| | | * @param uuid |
| | | * @return |
| | | * @throws BaseException |
| | | */ |
| | | public byte[] getFileByte(String uuid) throws BaseException { |
| | | File file = getFile(uuid, false); |
| | | if (file == null || !file.isFile()) { |
| | | return null; |
| | | } |
| | | byte[] bytes = cn.hutool.core.io.FileUtil.readBytes(file); |
| | | file.delete(); |
| | | return bytes; |
| | | } |
| | | |
| | | /** |
| | | * 获取文件 (文件使用完后请立即删除避免占用服务器磁盘空间) |
| | | * |
| | | * @param isUploadServer 是否上传在文件服务器 |
| | | * @param dir 存储路径一般为 附件表 attachment_url 字段(不含服务器文件存储文件夹) |
| | | * @param fileName 文件名称 |
| | | * @param isEncrypt 是否加密文件 |
| | | * @return 返回文件 当开启FTP时 第一次尝试在文件服务器上获取文件 获取不到再到应用部署服务器对应路径获取文件 |
| | | * @throws BaseException 找不到文件抛出文件路径错误 |
| | | */ |
| | | public File getFile(boolean isUploadServer, String dir, String fileName, boolean isEncrypt) throws BaseException { |
| | | if (StringUtils.isAnyEmpty(dir, fileName)) { |
| | | return null; |
| | | } |
| | | String path = dir + File.separator + fileName; |
| | | String random = RandomUtil.randomString(5); |
| | | if (isUploadServer && FTPService.needUpload2FileServer()) { |
| | | if (!fileIsExist(dir, fileName)) { |
| | | return null; |
| | | } |
| | | File file = new File(Global.getSystemConfig("temp.dir", "") + "/" + "temp_down_file_" + fileName + "_" + random); |
| | | if (file.isFile()) { |
| | | file.delete(); |
| | | } |
| | | try { |
| | | file.getParentFile().mkdirs(); |
| | | file.createNewFile(); |
| | | OutputStream out = new FileOutputStream(file); |
| | | FTPService ftpService = new FTPService(); |
| | | if (ftpService.downloadFile(path, out)) { |
| | | if (isEncrypt) { |
| | | String encryptPath = file.getParent() + "/" + "decode_file_temp_" + fileName + "_" + random; |
| | | out.flush(); |
| | | out.close(); |
| | | FileUtil.copyFile(file, encryptPath, -1); |
| | | file.delete(); |
| | | file = new File(encryptPath); |
| | | } else { |
| | | out.flush(); |
| | | out.close(); |
| | | } |
| | | if (file.isFile()) { |
| | | return file; |
| | | } |
| | | } else { |
| | | if (file.exists()) { |
| | | file.delete(); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText() + (StringUtils.isEmpty(e.getMessage()) ? "" : "," + e.getMessage())); |
| | | } |
| | | } |
| | | //本地服务器获取文件 |
| | | File file = new File(Global.getSystemConfig("local.dir", "") + File.separator + path); |
| | | if (file.isFile()) { |
| | | file = FileUtil.copyFile(file, Global.getSystemConfig("temp.dir", "") + File.separator + "download_file_temp_" + RandomUtil.randomString(5) + "_" + file.getName(), isEncrypt ? -1 : 0); |
| | | } |
| | | if (file.isFile()) { |
| | | return file; |
| | | } |
| | | throw new BaseException(FileCode.INVALID_FILE_PATH); |
| | | } |
| | | /** |
| | | * 获取文件 (文件使用完后请立即删除避免占用服务器磁盘空间) |
| | | * |
| | | * @param isUploadServer 是否上传在文件服务器 |
| | | * @param dir 存储路径一般为 附件表 attachment_url 字段(不含服务器文件存储文件夹) |
| | | * @param fileName 文件名称 |
| | | * @param isEncrypt 是否加密文件 |
| | | * @return 返回文件 当开启FTP时 第一次尝试在文件服务器上获取文件 获取不到再到应用部署服务器对应路径获取文件 |
| | | * @throws BaseException 找不到文件抛出文件路径错误 |
| | | */ |
| | | public File getFile(boolean isUploadServer, String dir, String fileName, boolean isEncrypt) throws BaseException { |
| | | if (StringUtils.isAnyEmpty(dir, fileName)) { |
| | | return null; |
| | | } |
| | | String path = dir + File.separator + fileName; |
| | | String random = RandomUtil.randomString(5); |
| | | if (isUploadServer && FTPService.needUpload2FileServer()) { |
| | | if (!fileIsExist(dir, fileName)) { |
| | | return null; |
| | | } |
| | | File file = new File(Global.getSystemConfig("temp.dir", "") + "/" + "temp_down_file_" + fileName + "_" + random); |
| | | if (file.isFile()) { |
| | | file.delete(); |
| | | } |
| | | try { |
| | | file.getParentFile().mkdirs(); |
| | | file.createNewFile(); |
| | | OutputStream out = new FileOutputStream(file); |
| | | FTPService ftpService = new FTPService(); |
| | | if (ftpService.downloadFile(path, out)) { |
| | | if (isEncrypt) { |
| | | String encryptPath = file.getParent() + "/" + "decode_file_temp_" + fileName + "_" + random; |
| | | out.flush(); |
| | | out.close(); |
| | | FileUtil.copyFile(file, encryptPath, -1); |
| | | file.delete(); |
| | | file = new File(encryptPath); |
| | | } else { |
| | | out.flush(); |
| | | out.close(); |
| | | } |
| | | if (file.isFile()) { |
| | | return file; |
| | | } |
| | | } else { |
| | | if (file.exists()) { |
| | | file.delete(); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText() + (StringUtils.isEmpty(e.getMessage()) ? "" : "," + e.getMessage())); |
| | | } |
| | | } |
| | | //本地服务器获取文件 |
| | | File file = new File(Global.getSystemConfig("local.dir", "") + File.separator + path); |
| | | if (file.isFile()) { |
| | | file = FileUtil.copyFile(file, Global.getSystemConfig("temp.dir", "") + File.separator + "download_file_temp_" + RandomUtil.randomString(5) + "_" + file.getName(), isEncrypt ? -1 : 0); |
| | | } |
| | | if (file.isFile()) { |
| | | return file; |
| | | } |
| | | throw new BaseException(FileCode.INVALID_FILE_PATH); |
| | | } |
| | | |
| | | /** |
| | | * 根据文件记录表uuid 获取文件 (文件使用完后请立即删除避免占用服务器磁盘空间) |
| | | * |
| | | * @param uuid |
| | | * @return |
| | | * @throws BaseException |
| | | */ |
| | | public File getFile(String uuid) throws BaseException { |
| | | return getFile(uuid, false); |
| | | } |
| | | /** |
| | | * 根据文件记录表uuid 获取文件 (文件使用完后请立即删除避免占用服务器磁盘空间) |
| | | * |
| | | * @param uuid |
| | | * @return |
| | | * @throws BaseException |
| | | */ |
| | | public File getFile(String uuid) throws BaseException { |
| | | return getFile(uuid, false); |
| | | } |
| | | |
| | | /** |
| | | * 获取文件 (文件使用完后请立即删除避免占用服务器磁盘空间) |
| | | * 传入参数可参考 public File getFile(String uuid, boolean onlineViewFile) throws BaseException |
| | | * |
| | | * @param dir 文件存储文件夹 (attachment_url) |
| | | * @param fileName 文件名称(attachment_title) |
| | | * @param onlineViewFile 是否在线预览 |
| | | * @param uploadSign 文件是否上传在文件服务器 |
| | | * @return |
| | | * @throws BaseException 找不到文件会抛出错误 |
| | | */ |
| | | public File getFile(String dir, String fileName, boolean onlineViewFile, boolean uploadSign) throws BaseException { |
| | | String path = dir + File.separator + |
| | | (onlineViewFile ? CmnConst.TRANSFER_DIR_NAME : "") + |
| | | File.separator + fileName; |
| | | if (uploadSign) { |
| | | //服务器上获取文件 |
| | | FTPService ftpService = new FTPService(); |
| | | File file = new File(Global.getSystemConfig("temp.dir", "") + "/" + "temp_down_file_" + fileName + "_" + RandomUtil.randomString(5)); |
| | | if (file.isFile()) { |
| | | file.delete(); |
| | | } |
| | | try { |
| | | file.getParentFile().mkdirs(); |
| | | file.createNewFile(); |
| | | OutputStream out = new FileOutputStream(file); |
| | | if (ftpService.downloadFile(path, out)) { |
| | | out.flush(); |
| | | out.close(); |
| | | return file; |
| | | } else { |
| | | out.flush(); |
| | | out.close(); |
| | | if (file.exists()) { |
| | | file.delete(); |
| | | } |
| | | } |
| | | throw new BaseException(FileCode.GET_FILE_FAIL); |
| | | } catch (Exception e) { |
| | | throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText() + (StringUtils.isEmpty(e.getMessage()) ? "" : "," + e.getMessage())); |
| | | } |
| | | } else { |
| | | //本地服务器获取文件 |
| | | File file = new File(Global.getSystemConfig("local.dir", "") + File.separator + path); |
| | | if (file.isFile()) { |
| | | File tempFile = new File(Global.getSystemConfig("temp.dir", "") + File.separator + "download_file_temp_" + RandomUtil.randomString(5) + "_" + file.getName()); |
| | | FileUtil.copyFile(file, tempFile.getPath()); |
| | | return tempFile; |
| | | } else { |
| | | throw new BaseException(FileCode.GET_FILE_FAIL); |
| | | } |
| | | } |
| | | } |
| | | /** |
| | | * 获取文件 (文件使用完后请立即删除避免占用服务器磁盘空间) |
| | | * 传入参数可参考 public File getFile(String uuid, boolean onlineViewFile) throws BaseException |
| | | * |
| | | * @param dir 文件存储文件夹 (attachment_url) |
| | | * @param fileName 文件名称(attachment_title) |
| | | * @param onlineViewFile 是否在线预览 |
| | | * @param uploadSign 文件是否上传在文件服务器 |
| | | * @return |
| | | * @throws BaseException 找不到文件会抛出错误 |
| | | */ |
| | | public File getFile(String dir, String fileName, boolean onlineViewFile, boolean uploadSign) throws BaseException { |
| | | String path = dir + File.separator + |
| | | (onlineViewFile ? CmnConst.TRANSFER_DIR_NAME : "") + |
| | | File.separator + fileName; |
| | | if (uploadSign) { |
| | | //服务器上获取文件 |
| | | FTPService ftpService = new FTPService(); |
| | | File file = new File(Global.getSystemConfig("temp.dir", "") + "/" + "temp_down_file_" + fileName + "_" + RandomUtil.randomString(5)); |
| | | if (file.isFile()) { |
| | | file.delete(); |
| | | } |
| | | try { |
| | | file.getParentFile().mkdirs(); |
| | | file.createNewFile(); |
| | | OutputStream out = new FileOutputStream(file); |
| | | if (ftpService.downloadFile(path, out)) { |
| | | out.flush(); |
| | | out.close(); |
| | | return file; |
| | | } else { |
| | | out.flush(); |
| | | out.close(); |
| | | if (file.exists()) { |
| | | file.delete(); |
| | | } |
| | | } |
| | | throw new BaseException(FileCode.GET_FILE_FAIL); |
| | | } catch (Exception e) { |
| | | throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText() + (StringUtils.isEmpty(e.getMessage()) ? "" : "," + e.getMessage())); |
| | | } |
| | | } else { |
| | | //本地服务器获取文件 |
| | | File file = new File(Global.getSystemConfig("local.dir", "") + File.separator + path); |
| | | if (file.isFile()) { |
| | | File tempFile = new File(Global.getSystemConfig("temp.dir", "") + File.separator + "download_file_temp_" + RandomUtil.randomString(5) + "_" + file.getName()); |
| | | FileUtil.copyFile(file, tempFile.getPath()); |
| | | return tempFile; |
| | | } else { |
| | | throw new BaseException(FileCode.GET_FILE_FAIL); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取文件 (文件使用完后请立即删除避免占用服务器磁盘空间) |
| | | * |
| | | * @param uuid 文件记录表uuid |
| | | * @param onlineViewFile 是否在线预览 |
| | | * @return |
| | | * @throws BaseException |
| | | */ |
| | | public File getFile(String uuid, boolean onlineViewFile) throws BaseException { |
| | | FieldSetEntity fse = getFileRecord(uuid); |
| | | return getFile(fse.getString(CmnConst.ATTACHMENT_URL), fse.getString(CmnConst.ATTACHMENT_TITLE), onlineViewFile, fse.getBoolean(CmnConst.UPLOAD_SIGN)); |
| | | } |
| | | /** |
| | | * 获取文件 (文件使用完后请立即删除避免占用服务器磁盘空间) |
| | | * |
| | | * @param uuid 文件记录表uuid |
| | | * @param onlineViewFile 是否在线预览 |
| | | * @return |
| | | * @throws BaseException |
| | | */ |
| | | public File getFile(String uuid, boolean onlineViewFile) throws BaseException { |
| | | FieldSetEntity fse = getFileRecord(uuid); |
| | | return getFile(fse.getString(CmnConst.ATTACHMENT_URL), fse.getString(CmnConst.ATTACHMENT_TITLE), onlineViewFile, fse.getBoolean(CmnConst.UPLOAD_SIGN)); |
| | | } |
| | | |
| | | /** |
| | | * 获取文件记录 |
| | | * |
| | | * @param uuid |
| | | * @return |
| | | * @throws BaseException |
| | | */ |
| | | public FieldSetEntity getFileRecord(String uuid) throws BaseException { |
| | | FieldSetEntity fse = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_ATTACHMENTS, uuid, false); |
| | | if (fse == null || StringUtils.isEmpty(fse.getUUID())) { |
| | | throw new BaseException(FileCode.GET_FILE_RECORD_FAIL); |
| | | } |
| | | return fse; |
| | | } |
| | | /** |
| | | * 获取文件记录 |
| | | * |
| | | * @param uuid |
| | | * @return |
| | | * @throws BaseException |
| | | */ |
| | | public FieldSetEntity getFileRecord(String uuid) throws BaseException { |
| | | FieldSetEntity fse = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_ATTACHMENTS, uuid, false); |
| | | if (fse == null || StringUtils.isEmpty(fse.getUUID())) { |
| | | throw new BaseException(FileCode.GET_FILE_RECORD_FAIL); |
| | | } |
| | | return fse; |
| | | } |
| | | |
| | | /** |
| | | * 输出文件流 |
| | | * |
| | | * @param uuid 文件记录uuid |
| | | * @param onlineView 在线预览 |
| | | * @param response |
| | | * @throws Exception |
| | | */ |
| | | public void getFile(String uuid, boolean onlineView, HttpServletResponse response) throws Exception { |
| | | FieldSetEntity fse = getFileRecord(uuid); |
| | | HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); |
| | | String userAgent = request.getHeader("User-Agent"); |
| | | String file_name = fse.getString("file_name"); |
| | | if (userAgent.contains("MSIE") || userAgent.contains("Trident")) { |
| | | file_name = java.net.URLEncoder.encode(file_name, "UTF-8"); |
| | | } else { |
| | | // 非IE浏览器的处理: |
| | | file_name = new String(file_name.getBytes("UTF-8"), "ISO-8859-1"); |
| | | } |
| | | response.setContentType("multipart/form-data"); |
| | | response.setHeader("Content-disposition", |
| | | String.format("attachment; filename=\"%s\"", file_name)); |
| | | String path = fse.getString(CmnConst.ATTACHMENT_URL) + File.separator + |
| | | (onlineView && fse.getBoolean(CmnConst.VIEW_ONLINE_SIGN) ? CmnConst.TRANSFER_DIR_NAME : "") + |
| | | File.separator + fse.getString(CmnConst.ATTACHMENT_TITLE); |
| | | if (fse.getBoolean(CmnConst.UPLOAD_SIGN)) { |
| | | //服务器上获取文件 |
| | | FTPService ftpService = new FTPService(); |
| | | ftpService.downloadFile(path, response.getOutputStream()); |
| | | } else { |
| | | //本地服务器获取文件 |
| | | File file = new File(Global.getSystemConfig("local.dir", "") + File.separator + path); |
| | | if (file.isFile()) { |
| | | IoUtil.write(response.getOutputStream(), true, cn.hutool.core.io.FileUtil.readBytes(file)); |
| | | } else { |
| | | throw new BaseException(FileCode.GET_FILE_FAIL); |
| | | } |
| | | } |
| | | } |
| | | /** |
| | | * 输出文件流 |
| | | * |
| | | * @param uuid 文件记录uuid |
| | | * @param onlineView 在线预览 |
| | | * @param response |
| | | * @throws Exception |
| | | */ |
| | | public void getFile(String uuid, boolean onlineView, HttpServletResponse response) throws Exception { |
| | | FieldSetEntity fse = getFileRecord(uuid); |
| | | HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); |
| | | String userAgent = request.getHeader("User-Agent"); |
| | | String file_name = fse.getString("file_name"); |
| | | if (userAgent.contains("MSIE") || userAgent.contains("Trident")) { |
| | | file_name = java.net.URLEncoder.encode(file_name, "UTF-8"); |
| | | } else { |
| | | // 非IE浏览器的处理: |
| | | file_name = new String(file_name.getBytes("UTF-8"), "ISO-8859-1"); |
| | | } |
| | | response.setContentType("multipart/form-data"); |
| | | response.setHeader("Content-disposition", |
| | | String.format("attachment; filename=\"%s\"", file_name)); |
| | | String path = fse.getString(CmnConst.ATTACHMENT_URL) + File.separator + |
| | | (onlineView && fse.getBoolean(CmnConst.VIEW_ONLINE_SIGN) ? CmnConst.TRANSFER_DIR_NAME : "") + |
| | | File.separator + fse.getString(CmnConst.ATTACHMENT_TITLE); |
| | | if (fse.getBoolean(CmnConst.UPLOAD_SIGN)) { |
| | | //服务器上获取文件 |
| | | FTPService ftpService = new FTPService(); |
| | | ftpService.downloadFile(path, response.getOutputStream()); |
| | | } else { |
| | | //本地服务器获取文件 |
| | | File file = new File(Global.getSystemConfig("local.dir", "") + File.separator + path); |
| | | if (file.isFile()) { |
| | | IoUtil.write(response.getOutputStream(), true, cn.hutool.core.io.FileUtil.readBytes(file)); |
| | | } else { |
| | | throw new BaseException(FileCode.GET_FILE_FAIL); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 上传文件 |
| | | * 删除传入的文件 |
| | | * |
| | | * @param filePath 文件路径 |
| | | * @return 返回上传后的文件名称 |
| | | */ |
| | | public static String uploadFile(String filePath) throws BaseException { |
| | | return uploadFile(new File(filePath), null, true); |
| | | } |
| | | /** |
| | | * 上传文件 |
| | | * 删除传入的文件 |
| | | * |
| | | * @param filePath 文件路径 |
| | | * @return 返回上传后的文件名称 |
| | | */ |
| | | public static String uploadFile(String filePath) throws BaseException { |
| | | return uploadFile(new File(filePath), null, true); |
| | | } |
| | | |
| | | /** |
| | | * 上传文件 |
| | | * 删除传入的文件 |
| | | * |
| | | * @param file 文件 |
| | | * @return 返回上传后的文件名称 |
| | | */ |
| | | public static String uploadFile(File file) throws BaseException { |
| | | return uploadFile(file, null, true); |
| | | } |
| | | /** |
| | | * 上传文件 |
| | | * 删除传入的文件 |
| | | * |
| | | * @param file 文件 |
| | | * @return 返回上传后的文件名称 |
| | | */ |
| | | public static String uploadFile(File file) throws BaseException { |
| | | return uploadFile(file, null, true); |
| | | } |
| | | |
| | | /** |
| | | * 上传文件 |
| | | * 删除传入的文件 |
| | | * |
| | | * @param file |
| | | * @param templateType 模板类型 |
| | | * @return 返回上传后的文件名称 |
| | | */ |
| | | public static String uploadFile(File file, String templateType) throws BaseException { |
| | | return uploadFile(file, templateType, true); |
| | | } |
| | | /** |
| | | * 上传文件 |
| | | * 删除传入的文件 |
| | | * |
| | | * @param file |
| | | * @param templateType 模板类型 |
| | | * @return 返回上传后的文件名称 |
| | | */ |
| | | public static String uploadFile(File file, String templateType) throws BaseException { |
| | | return uploadFile(file, templateType, true); |
| | | } |
| | | |
| | | /** |
| | | * 上传文件 |
| | | * 删除传入的文件 |
| | | * |
| | | * @param file |
| | | * @param templateType 模板类型 |
| | | * @return 返回上传后的文件名称 |
| | | */ |
| | | public static String uploadFile(File file, String templateType, String clientUuid) throws BaseException { |
| | | return uploadFile(file, templateType, true, clientUuid); |
| | | } |
| | | /** |
| | | * 上传文件 |
| | | * 删除传入的文件 |
| | | * |
| | | * @param file |
| | | * @param templateType 模板类型 |
| | | * @return 返回上传后的文件名称 |
| | | */ |
| | | public static String uploadFile(File file, String templateType, String clientUuid) throws BaseException { |
| | | return uploadFile(file, templateType, true, clientUuid); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @param file 文件 |
| | | * @param templateType 模板类型 1 = import 2 = print , 其他 |
| | | * @param deleteFile 是否删除传入的文件 |
| | | * @return |
| | | */ |
| | | public static String uploadFile(File file, String templateType, boolean deleteFile, String clientUuid) throws BaseException { |
| | | if (file == null || !file.isFile()) { |
| | | throw new BaseException(FileCode.UPLOAD_FILE_NOT_EXISTS); |
| | | } |
| | | if (StringUtils.isEmpty(clientUuid)) { |
| | | throw new BaseException(FileCode.GET_CLIENT_INFO_FAIL); |
| | | } |
| | | String dir; |
| | | if (StringUtils.isEmpty(templateType)) { |
| | | String timeStr = new SimpleDateFormat("yyyyMMdd").format(new Date()); |
| | | dir = clientUuid + File.separator + timeStr; |
| | | } else { |
| | | dir = CmnConst.DIR_TEMPLATE + File.separator + ("1".equals(templateType) ? CmnConst.DIR_IMPORT : ("2".equals(templateType) ? CmnConst.DIR_PRINT : CmnConst.DIR_OTHER)); |
| | | } |
| | | String saveFileName = System.currentTimeMillis() + RandomUtil.randomString(2); |
| | | //文件加密 |
| | | boolean encryptFile = Global.getPropertyToBoolean("file.encrypt", "true"); |
| | | /** |
| | | * @param file 文件 |
| | | * @param templateType 模板类型 1 = import 2 = print , 其他 |
| | | * @param deleteFile 是否删除传入的文件 |
| | | * @return |
| | | */ |
| | | public static String uploadFile(File file, String templateType, boolean deleteFile, String clientUuid) throws BaseException { |
| | | if (file == null || !file.isFile()) { |
| | | throw new BaseException(FileCode.UPLOAD_FILE_NOT_EXISTS); |
| | | } |
| | | if (StringUtils.isEmpty(clientUuid)) { |
| | | throw new BaseException(FileCode.GET_CLIENT_INFO_FAIL); |
| | | } |
| | | String dir; |
| | | if (StringUtils.isEmpty(templateType)) { |
| | | String timeStr = new SimpleDateFormat("yyyyMMdd").format(new Date()); |
| | | dir = clientUuid + File.separator + timeStr; |
| | | } else { |
| | | dir = CmnConst.DIR_TEMPLATE + File.separator + ("1".equals(templateType) ? CmnConst.DIR_IMPORT : ("2".equals(templateType) ? CmnConst.DIR_PRINT : CmnConst.DIR_OTHER)); |
| | | } |
| | | String saveFileName = System.currentTimeMillis() + RandomUtil.randomString(2); |
| | | //文件加密 |
| | | boolean encryptFile = Global.getPropertyToBoolean("file.encrypt", "true"); |
| | | |
| | | try { |
| | | //上传至FTP 服务器 |
| | | if (FTPService.needUpload2FileServer()) { |
| | | FTPService ftpService = new FTPService(); |
| | | String tail = file.getName().substring(file.getName().lastIndexOf(".")); |
| | | String tempEncryptFilePath = Global.getSystemConfig("temp.dir", "./attachment/temp") + File.separator + "encrypt_" + saveFileName + tail; |
| | | FileUtil.copyFile(file, tempEncryptFilePath, encryptFile ? 1 : 0); |
| | | ftpService.uploadFile(new FileInputStream(tempEncryptFilePath), saveFileName, dir); |
| | | File sourceFile = new File(tempEncryptFilePath); |
| | | if (sourceFile.isFile()) { |
| | | convertPdf(deleteFile, true, encryptFile, false, sourceFile, dir + File.separator + CmnConst.TRANSFER_DIR_NAME, saveFileName, file.getName()); |
| | | } |
| | | if (deleteFile && file.isFile()) { |
| | | file.delete(); |
| | | } |
| | | sourceFile.delete(); |
| | | } else { |
| | | //上传到本地 |
| | | String path = Global.getSystemConfig("local.dir", "") + File.separator + dir + File.separator + saveFileName; |
| | | FileUtil.copyFile(file, path, encryptFile ? 1 : 0); |
| | | File sourceFile = new File(path); |
| | | if (sourceFile.isFile()) { |
| | | convertPdf(false, encryptFile, false, sourceFile, dir + File.separator + CmnConst.TRANSFER_DIR_NAME, saveFileName, file.getName()); |
| | | } |
| | | if (deleteFile && file.isFile()) { |
| | | file.delete(); |
| | | } |
| | | } |
| | | return saveFileName; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | throw new BaseException(FileCode.UPLOAD_FILE_FAIL); |
| | | } |
| | | } |
| | | try { |
| | | //上传至FTP 服务器 |
| | | if (FTPService.needUpload2FileServer()) { |
| | | FTPService ftpService = new FTPService(); |
| | | String tail = file.getName().substring(file.getName().lastIndexOf(".")); |
| | | String tempEncryptFilePath = Global.getSystemConfig("temp.dir", "./attachment/temp") + File.separator + "encrypt_" + saveFileName + tail; |
| | | FileUtil.copyFile(file, tempEncryptFilePath, encryptFile ? 1 : 0); |
| | | ftpService.uploadFile(new FileInputStream(tempEncryptFilePath), saveFileName, dir); |
| | | File sourceFile = new File(tempEncryptFilePath); |
| | | if (sourceFile.isFile()) { |
| | | convertPdf(deleteFile, true, encryptFile, false, sourceFile, dir + File.separator + CmnConst.TRANSFER_DIR_NAME, saveFileName, file.getName()); |
| | | } |
| | | if (deleteFile && file.isFile()) { |
| | | file.delete(); |
| | | } |
| | | sourceFile.delete(); |
| | | } else { |
| | | //上传到本地 |
| | | String path = Global.getSystemConfig("local.dir", "") + File.separator + dir + File.separator + saveFileName; |
| | | FileUtil.copyFile(file, path, encryptFile ? 1 : 0); |
| | | File sourceFile = new File(path); |
| | | if (sourceFile.isFile()) { |
| | | convertPdf(false, encryptFile, false, sourceFile, dir + File.separator + CmnConst.TRANSFER_DIR_NAME, saveFileName, file.getName()); |
| | | } |
| | | if (deleteFile && file.isFile()) { |
| | | file.delete(); |
| | | } |
| | | } |
| | | return saveFileName; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | throw new BaseException(FileCode.UPLOAD_FILE_FAIL); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @param file 文件 |
| | | * @param templateType 模板类型 1 = import 2 = print , 其他 |
| | | * @param deleteFile 是否删除传入的文件 |
| | | * @return |
| | | */ |
| | | public static String uploadFile(File file, String templateType, boolean deleteFile) throws BaseException { |
| | | SystemUser currentUser = SpringMVCContextHolder.getCurrentUser(); |
| | | String clientUuid = null; |
| | | if (currentUser != null) { |
| | | clientUuid = currentUser.getClient_uuid(); |
| | | } |
| | | return uploadFile(file, templateType, deleteFile, clientUuid); |
| | | } |
| | | /** |
| | | * @param file 文件 |
| | | * @param templateType 模板类型 1 = import 2 = print , 其他 |
| | | * @param deleteFile 是否删除传入的文件 |
| | | * @return |
| | | */ |
| | | public static String uploadFile(File file, String templateType, boolean deleteFile) throws BaseException { |
| | | SystemUser currentUser = SpringMVCContextHolder.getCurrentUser(); |
| | | String clientUuid = null; |
| | | if (currentUser != null) { |
| | | clientUuid = currentUser.getClient_uuid(); |
| | | } |
| | | return uploadFile(file, templateType, deleteFile, clientUuid); |
| | | } |
| | | |
| | | /** |
| | | * 上传其他文件 |
| | | * |
| | | * @param encryptFile 加密文件 |
| | | * @param catalogue 上传目录 |
| | | * @param file 上传文件 |
| | | * @param fileName 文件名称 |
| | | */ |
| | | public static void uploadOtherFile(boolean encryptFile, String catalogue, File file, String fileName) throws BaseException { |
| | | uploadOtherFile(encryptFile, true, catalogue, file, fileName); |
| | | } |
| | | /** |
| | | * 上传其他文件 |
| | | * |
| | | * @param encryptFile 加密文件 |
| | | * @param catalogue 上传目录 |
| | | * @param file 上传文件 |
| | | * @param fileName 文件名称 |
| | | */ |
| | | public static void uploadOtherFile(boolean encryptFile, String catalogue, File file, String fileName) throws BaseException { |
| | | uploadOtherFile(encryptFile, true, catalogue, file, fileName); |
| | | } |
| | | |
| | | /** |
| | | * 上传其他文件 |
| | | * |
| | | * @param encryptFile 加密文件 |
| | | * @param uploadServer 上传至服务器 |
| | | * @param catalogue 上传目录 |
| | | * @param file 上传文件 |
| | | * @param fileName 文件名称 |
| | | */ |
| | | public static void uploadOtherFile(boolean encryptFile, boolean uploadServer, String catalogue, File file, String fileName) throws BaseException { |
| | | if (file == null || !file.isFile()) { |
| | | return; |
| | | } |
| | | try { |
| | | catalogue = catalogue.replace("\\", "/"); |
| | | if (catalogue.indexOf("/") == 0) { |
| | | catalogue = catalogue.substring(1); |
| | | } |
| | | if (uploadServer && FTPService.needUpload2FileServer()) { |
| | | //上传至服务器 |
| | | FTPService ftpService = new FTPService(); |
| | | if (encryptFile) { |
| | | String path = Global.getSystemConfig("temp.dir", "") + "/upload_other_file_" + RandomUtil.randomString(5) + "_" + file.getName(); |
| | | file = FileUtil.copyFile(file, path, 1); |
| | | } |
| | | FileInputStream is = new FileInputStream(file); |
| | | ftpService.uploadFile(is, fileName, catalogue); |
| | | is.close(); |
| | | if (encryptFile) { |
| | | file.delete(); |
| | | } |
| | | } else { |
| | | String path = Global.getSystemConfig("local.dir", "") + File.separator + catalogue + File.separator + fileName; |
| | | FileUtil.copyFile(file, path, encryptFile ? 1 : 0); |
| | | } |
| | | } catch (Exception e) { |
| | | throw new BaseException(FileCode.UPLOAD_FILE_FAIL); |
| | | } |
| | | } |
| | | /** |
| | | * 上传其他文件 |
| | | * |
| | | * @param encryptFile 加密文件 |
| | | * @param uploadServer 上传至服务器 |
| | | * @param catalogue 上传目录 |
| | | * @param file 上传文件 |
| | | * @param fileName 文件名称 |
| | | */ |
| | | public static void uploadOtherFile(boolean encryptFile, boolean uploadServer, String catalogue, File file, String fileName) throws BaseException { |
| | | if (file == null || !file.isFile()) { |
| | | return; |
| | | } |
| | | try { |
| | | catalogue = catalogue.replace("\\", "/"); |
| | | if (catalogue.indexOf("/") == 0) { |
| | | catalogue = catalogue.substring(1); |
| | | } |
| | | if (uploadServer && FTPService.needUpload2FileServer()) { |
| | | //上传至服务器 |
| | | FTPService ftpService = new FTPService(); |
| | | if (encryptFile) { |
| | | String path = Global.getSystemConfig("temp.dir", "") + "/upload_other_file_" + RandomUtil.randomString(5) + "_" + file.getName(); |
| | | file = FileUtil.copyFile(file, path, 1); |
| | | } |
| | | FileInputStream is = new FileInputStream(file); |
| | | ftpService.uploadFile(is, fileName, catalogue); |
| | | is.close(); |
| | | if (encryptFile) { |
| | | file.delete(); |
| | | } |
| | | } else { |
| | | String path = Global.getSystemConfig("local.dir", "") + File.separator + catalogue + File.separator + fileName; |
| | | FileUtil.copyFile(file, path, encryptFile ? 1 : 0); |
| | | } |
| | | } catch (Exception e) { |
| | | SpringMVCContextHolder.getSystemLogger().error(e); |
| | | throw new BaseException(FileCode.UPLOAD_FILE_FAIL); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 替换文件 |
| | | * |
| | | * @param sourceFileCatalogue 替换文件所在的目录 (attachment_url) |
| | | * @param sourceFileName 替换的文件名称 (attachment_title) |
| | | * @param originalFileName 原始文件名称 (file_name) |
| | | * @param sourceFile 需要替换的文件 |
| | | * @param encryptSign 加密标识 |
| | | * @param isUploadServer 上传到服务器 |
| | | * @param convertPDF 是否转换PDF |
| | | * @throws BaseException |
| | | */ |
| | | public void replaceFile(String sourceFileCatalogue, String sourceFileName, String originalFileName, File sourceFile, boolean encryptSign, boolean isUploadServer, boolean convertPDF) throws BaseException { |
| | | try { |
| | | if (isUploadServer) { |
| | | boolean deleteFile = false; |
| | | if (encryptSign) { |
| | | //加密文件 |
| | | String tempPath = Global.getSystemConfig("temp.dir", "./attachment/temp") + "/" + "encrypt_replace_" + IdUtil.randomUUID(); |
| | | FileUtil.copyFile(sourceFile, tempPath, 1); |
| | | sourceFile = new File(tempPath); |
| | | deleteFile = true; |
| | | } |
| | | FTPService ftpService = new FTPService(); |
| | | InputStream is = new FileInputStream(sourceFile); |
| | | ftpService.uploadFile(is, sourceFileName, sourceFileCatalogue); |
| | | is.close(); |
| | | if (convertPDF && sourceFile.isFile()) { |
| | | convertPdf(deleteFile, isUploadServer, encryptSign, false, sourceFile, sourceFileCatalogue + File.separator + CmnConst.TRANSFER_DIR_NAME, sourceFileName, originalFileName); |
| | | } |
| | | } else { |
| | | String localDir = Global.getSystemConfig("local.dir", ""); |
| | | FileUtil.copyFile(sourceFile, localDir + File.separator + sourceFileCatalogue + File.separator + sourceFileName, encryptSign ? 1 : 0); |
| | | File file = new File(localDir + File.separator + sourceFileCatalogue + File.separator + sourceFileName); |
| | | if (convertPDF && file.isFile()) { |
| | | convertPdf(false, encryptSign, false, file, sourceFileCatalogue + File.separator + CmnConst.TRANSFER_DIR_NAME, sourceFileName, originalFileName); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | throw new BaseException(FileCode.REPLACE_FILE_FAIL); |
| | | } |
| | | } |
| | | /** |
| | | * 替换文件 |
| | | * |
| | | * @param sourceFileCatalogue 替换文件所在的目录 (attachment_url) |
| | | * @param sourceFileName 替换的文件名称 (attachment_title) |
| | | * @param originalFileName 原始文件名称 (file_name) |
| | | * @param sourceFile 需要替换的文件 |
| | | * @param encryptSign 加密标识 |
| | | * @param isUploadServer 上传到服务器 |
| | | * @param convertPDF 是否转换PDF |
| | | * @throws BaseException |
| | | */ |
| | | public void replaceFile(String sourceFileCatalogue, String sourceFileName, String originalFileName, File sourceFile, boolean encryptSign, boolean isUploadServer, boolean convertPDF) throws BaseException { |
| | | try { |
| | | if (isUploadServer) { |
| | | boolean deleteFile = false; |
| | | if (encryptSign) { |
| | | //加密文件 |
| | | String tempPath = Global.getSystemConfig("temp.dir", "./attachment/temp") + "/" + "encrypt_replace_" + IdUtil.randomUUID(); |
| | | FileUtil.copyFile(sourceFile, tempPath, 1); |
| | | sourceFile = new File(tempPath); |
| | | deleteFile = true; |
| | | } |
| | | FTPService ftpService = new FTPService(); |
| | | InputStream is = new FileInputStream(sourceFile); |
| | | ftpService.uploadFile(is, sourceFileName, sourceFileCatalogue); |
| | | is.close(); |
| | | if (convertPDF && sourceFile.isFile()) { |
| | | convertPdf(deleteFile, isUploadServer, encryptSign, false, sourceFile, sourceFileCatalogue + File.separator + CmnConst.TRANSFER_DIR_NAME, sourceFileName, originalFileName); |
| | | } |
| | | } else { |
| | | String localDir = Global.getSystemConfig("local.dir", ""); |
| | | FileUtil.copyFile(sourceFile, localDir + File.separator + sourceFileCatalogue + File.separator + sourceFileName, encryptSign ? 1 : 0); |
| | | File file = new File(localDir + File.separator + sourceFileCatalogue + File.separator + sourceFileName); |
| | | if (convertPDF && file.isFile()) { |
| | | convertPdf(false, encryptSign, false, file, sourceFileCatalogue + File.separator + CmnConst.TRANSFER_DIR_NAME, sourceFileName, originalFileName); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | SpringMVCContextHolder.getSystemLogger().error(e); |
| | | throw new BaseException(FileCode.REPLACE_FILE_FAIL); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 替换文件 |
| | | * |
| | | * @param uuid 附件表uuid |
| | | * @param sourceFile |
| | | * @return 返回文件记录 |
| | | */ |
| | | public FieldSetEntity replaceFile(String uuid, File sourceFile) throws BaseException { |
| | | FieldSetEntity fse = getFileRecord(uuid); |
| | | replaceFile(fse.getString(CmnConst.ATTACHMENT_URL), fse.getString(CmnConst.ATTACHMENT_TITLE), fse.getString(CmnConst.FILE_NAME), sourceFile, fse.getBoolean(CmnConst.ENCRPT_SIGN), fse.getBoolean(CmnConst.UPLOAD_SIGN), fse.getBoolean(CmnConst.VIEW_ONLINE_SIGN)); |
| | | return fse; |
| | | } |
| | | /** |
| | | * 替换文件 |
| | | * |
| | | * @param uuid 附件表uuid |
| | | * @param sourceFile |
| | | * @return 返回文件记录 |
| | | */ |
| | | public FieldSetEntity replaceFile(String uuid, File sourceFile) throws BaseException { |
| | | FieldSetEntity fse = getFileRecord(uuid); |
| | | replaceFile(fse.getString(CmnConst.ATTACHMENT_URL), fse.getString(CmnConst.ATTACHMENT_TITLE), fse.getString(CmnConst.FILE_NAME), sourceFile, fse.getBoolean(CmnConst.ENCRPT_SIGN), fse.getBoolean(CmnConst.UPLOAD_SIGN), fse.getBoolean(CmnConst.VIEW_ONLINE_SIGN)); |
| | | return fse; |
| | | } |
| | | |
| | | /** |
| | | * 转换pdf |
| | | * |
| | | * @param uploadServer 上传到服务器 |
| | | * @param isEncrypt 是否加密 |
| | | * @param threadSync 线程同步 |
| | | * @param file 文件 |
| | | * @param placeLocation 文件所在目录 |
| | | * @param fileName 文件名称 |
| | | * @param sourceFileName 源文件名称 |
| | | * @return |
| | | * @throws BaseException |
| | | */ |
| | | public static boolean convertPdf(boolean uploadServer, boolean isEncrypt, boolean threadSync, File file, String placeLocation, String fileName, String sourceFileName) throws BaseException { |
| | | return convertPdf(false, uploadServer, isEncrypt, threadSync, file, placeLocation, fileName, sourceFileName); |
| | | } |
| | | /** |
| | | * 转换pdf |
| | | * |
| | | * @param uploadServer 上传到服务器 |
| | | * @param isEncrypt 是否加密 |
| | | * @param threadSync 线程同步 |
| | | * @param file 文件 |
| | | * @param placeLocation 文件所在目录 |
| | | * @param fileName 文件名称 |
| | | * @param sourceFileName 源文件名称 |
| | | * @return |
| | | * @throws BaseException |
| | | */ |
| | | public static boolean convertPdf(boolean uploadServer, boolean isEncrypt, boolean threadSync, File file, String placeLocation, String fileName, String sourceFileName) throws BaseException { |
| | | return convertPdf(false, uploadServer, isEncrypt, threadSync, file, placeLocation, fileName, sourceFileName); |
| | | } |
| | | |
| | | /** |
| | | * @param threadSync 线程同步 false 异步转换 |
| | | * @param file 需要转换的文件 |
| | | * @param placeLocation 转换后存放的路径 (不需要拼接服务器文件夹路径) |
| | | * @param fileName 转换后的文件名称 |
| | | * @return 是否转换成功 异步转换时忽略该返回 |
| | | */ |
| | | public static boolean convertPdf(boolean deleteFile, boolean uploadServer, boolean isEncrypt, boolean threadSync, File file, String placeLocation, String fileName, String sourceFileName) throws BaseException { |
| | | if (file.isFile() && !StringUtils.isEmpty(placeLocation) && !StringUtils.isEmpty(fileName)) { |
| | | String tail = sourceFileName.substring(sourceFileName.lastIndexOf(".") + 1); |
| | | boolean needTransferFlag = Global.getPropertyToBoolean("file.view.online", "true") && ("," + Global.getSystemConfig("can.transfer.format", "") + ",").contains("," + tail + ","); |
| | | if (!needTransferFlag) { |
| | | return false; |
| | | } |
| | | placeLocation = placeLocation.replace("\\", "/"); |
| | | if (placeLocation.indexOf("/") != 0) { |
| | | placeLocation += "/"; |
| | | } |
| | | //线程同步 |
| | | if (threadSync) { |
| | | boolean b = convertPdf(uploadServer, isEncrypt, file, placeLocation, fileName); |
| | | if (deleteFile && file.isFile()) { |
| | | file.delete(); |
| | | } |
| | | return b; |
| | | } else { |
| | | ExecutorService executorService = Executors.newSingleThreadExecutor(); |
| | | String finalPlaceLocation = placeLocation; |
| | | final File ff = FileUtil.copyFile(file, Global.getSystemConfig("temp.dir", "") + "/" + "temp_convert_pdf_" + RandomUtil.randomString(5) + "_" + file.getName(), 0); |
| | | executorService.submit(() -> { |
| | | convertPdf(uploadServer, isEncrypt, ff, finalPlaceLocation, fileName); |
| | | if (ff.isFile()) { |
| | | ff.delete(); |
| | | } |
| | | if (deleteFile && file.isFile()) { |
| | | file.delete(); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | /** |
| | | * @param threadSync 线程同步 false 异步转换 |
| | | * @param file 需要转换的文件 |
| | | * @param placeLocation 转换后存放的路径 (不需要拼接服务器文件夹路径) |
| | | * @param fileName 转换后的文件名称 |
| | | * @return 是否转换成功 异步转换时忽略该返回 |
| | | */ |
| | | public static boolean convertPdf(boolean deleteFile, boolean uploadServer, boolean isEncrypt, boolean threadSync, File file, String placeLocation, String fileName, String sourceFileName) throws BaseException { |
| | | if (file.isFile() && !StringUtils.isEmpty(placeLocation) && !StringUtils.isEmpty(fileName)) { |
| | | String tail = sourceFileName.substring(sourceFileName.lastIndexOf(".") + 1); |
| | | boolean needTransferFlag = Global.getPropertyToBoolean("file.view.online", "true") && ("," + Global.getSystemConfig("can.transfer.format", "") + ",").contains("," + tail + ","); |
| | | if (!needTransferFlag) { |
| | | return false; |
| | | } |
| | | placeLocation = placeLocation.replace("\\", "/"); |
| | | if (placeLocation.indexOf("/") != 0) { |
| | | placeLocation += "/"; |
| | | } |
| | | //线程同步 |
| | | if (threadSync) { |
| | | boolean b = convertPdf(uploadServer, isEncrypt, file, placeLocation, fileName, tail); |
| | | if (deleteFile && file.isFile()) { |
| | | file.delete(); |
| | | } |
| | | return b; |
| | | } else { |
| | | ExecutorService executorService = Executors.newSingleThreadExecutor(); |
| | | String finalPlaceLocation = placeLocation; |
| | | final File ff = FileUtil.copyFile(file, Global.getSystemConfig("temp.dir", "") + "/" + "temp_convert_pdf_" + RandomUtil.randomString(5) + "_" + file.getName(), 0); |
| | | executorService.submit(() -> { |
| | | convertPdf(uploadServer, isEncrypt, ff, finalPlaceLocation, fileName, tail); |
| | | if (ff.isFile()) { |
| | | ff.delete(); |
| | | } |
| | | if (deleteFile && file.isFile()) { |
| | | file.delete(); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | private static boolean convertPdf(boolean uploadServer, boolean isEncrypt, File file, String placeLocation, String fileName) throws BaseException { |
| | | File pdfFile = null; |
| | | String random = RandomUtil.randomString(5); |
| | | String tempPath = Global.getSystemConfig("temp.dir", "./attachment/temp") + "/" + "convertPDF_" + random + "_" + file.getName(); |
| | | String tempPathSuccess = Global.getSystemConfig("temp.dir", "./attachment/temp") + "/" + "convertPDF_success_" + random + ".pdf"; |
| | | try { |
| | | FileUtil.copyFile(file, tempPath, 0); |
| | | pdfFile = PdfConcurrenceUtil.convertToPdf(tempPath, tempPathSuccess); |
| | | String s = Global.getSystemConfig("temp.dir", "") + "/" + "convertPDF_encryptTemp_" + random + ".pdf"; |
| | | FileUtil.copyFile(pdfFile, s, isEncrypt ? 1 : 0); |
| | | pdfFile.delete(); |
| | | pdfFile = new File(s); |
| | | uploadOtherFile(false, uploadServer, placeLocation, pdfFile, fileName); |
| | | return true; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | throw new BaseException(FileCode.CONVERT_PDF_FILE_FAIL); |
| | | } finally { |
| | | try { |
| | | if (pdfFile.isFile()) { |
| | | pdfFile.delete(); |
| | | } |
| | | com.product.common.io.FileUtils.delFile(tempPath); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | private static boolean convertPdf(boolean uploadServer, boolean isEncrypt, File file, String placeLocation, String fileName, String officeType) throws BaseException { |
| | | File pdfFile = null; |
| | | String random = RandomUtil.randomString(5); |
| | | String tempPath = Global.getSystemConfig("temp.dir", "./attachment/temp") + "/" + "convertPDF_" + random + "_" + file.getName(); |
| | | String tempPathSuccess = Global.getSystemConfig("temp.dir", "./attachment/temp") + "/" + "convertPDF_success_" + random + ".pdf"; |
| | | try { |
| | | FileUtil.copyFile(file, tempPath, 0); |
| | | pdfFile = PdfConcurrenceUtil.convertToPdf(tempPath, tempPathSuccess, officeType); |
| | | String s = Global.getSystemConfig("temp.dir", "") + "/" + "convertPDF_encryptTemp_" + random + ".pdf"; |
| | | FileUtil.copyFile(pdfFile, s, isEncrypt ? 1 : 0); |
| | | pdfFile.delete(); |
| | | pdfFile = new File(s); |
| | | uploadOtherFile(false, uploadServer, placeLocation, pdfFile, fileName); |
| | | return true; |
| | | } catch (BaseException e) { |
| | | throw e; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | throw new BaseException(FileCode.CONVERT_PDF_FILE_FAIL); |
| | | } finally { |
| | | try { |
| | | if (pdfFile != null && pdfFile.isFile()) { |
| | | pdfFile.delete(); |
| | | } |
| | | com.product.common.io.FileUtils.delFile(tempPath); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | } |