TSysFileController.java 49 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232
  1. package cn.com.lzt.common.controller;
  2. import java.io.BufferedInputStream;
  3. import java.io.ByteArrayInputStream;
  4. import java.io.ByteArrayOutputStream;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.FileNotFoundException;
  8. import java.io.FileOutputStream;
  9. import java.io.IOException;
  10. import java.io.InputStream;
  11. import java.io.OutputStream;
  12. import java.lang.reflect.InvocationTargetException;
  13. import java.net.URLEncoder;
  14. import java.util.*;
  15. import java.util.regex.Matcher;
  16. import java.util.regex.Pattern;
  17. import javax.servlet.http.HttpServletRequest;
  18. import javax.servlet.http.HttpServletResponse;
  19. import org.apache.commons.beanutils.BeanUtils;
  20. import org.apache.commons.lang3.StringUtils;
  21. import org.apache.log4j.Logger;
  22. import org.jeecgframework.core.common.controller.BaseController;
  23. import org.jeecgframework.core.common.exception.BusinessException;
  24. import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
  25. import org.jeecgframework.core.common.model.json.AjaxJson;
  26. import org.jeecgframework.core.common.model.json.DataGrid;
  27. import org.jeecgframework.core.constant.Globals;
  28. import org.jeecgframework.core.util.BrowserType;
  29. import org.jeecgframework.core.util.BrowserUtils;
  30. import org.jeecgframework.core.util.ExceptionUtil;
  31. import org.jeecgframework.core.util.FileUtils;
  32. import org.jeecgframework.core.util.ListUtils;
  33. import org.jeecgframework.core.util.MutiLangUtil;
  34. import org.jeecgframework.core.util.ResourceUtil;
  35. import org.jeecgframework.core.util.StringUtil;
  36. import org.jeecgframework.core.util.oConvertUtils;
  37. import org.jeecgframework.poi.excel.ExcelImportUtil;
  38. import org.jeecgframework.poi.excel.entity.ExportParams;
  39. import org.jeecgframework.poi.excel.entity.ImportParams;
  40. import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants;
  41. import org.jeecgframework.tag.core.easyui.TagUtil;
  42. import org.jeecgframework.web.system.pojo.base.TSUser;
  43. import org.jeecgframework.web.system.service.SystemService;
  44. import org.springframework.beans.factory.annotation.Autowired;
  45. import org.springframework.http.HttpStatus;
  46. import org.springframework.http.ResponseEntity;
  47. import org.springframework.stereotype.Controller;
  48. import org.springframework.ui.ModelMap;
  49. import org.springframework.util.FileCopyUtils;
  50. import org.springframework.web.bind.annotation.PathVariable;
  51. import org.springframework.web.bind.annotation.RequestMapping;
  52. import org.springframework.web.bind.annotation.RequestMethod;
  53. import org.springframework.web.bind.annotation.ResponseBody;
  54. import org.springframework.web.multipart.MultipartFile;
  55. import org.springframework.web.multipart.MultipartHttpServletRequest;
  56. import org.springframework.web.servlet.ModelAndView;
  57. import cn.com.lzt.common.entity.TSysFileEntity;
  58. import cn.com.lzt.common.entity.WebUploadEntity;
  59. import cn.com.lzt.common.service.TSysFileServiceI;
  60. import cn.com.lzt.common.util.CustomerConstant;
  61. import com.alibaba.fastjson.JSONObject;
  62. import com.aliyun.oss.OSSClient;
  63. import com.aliyun.oss.model.OSSObject;
  64. import com.aliyun.oss.model.ObjectMetadata;
  65. import com.aliyuncs.DefaultAcsClient;
  66. import com.aliyuncs.IAcsClient;
  67. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
  68. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
  69. import com.aliyuncs.http.MethodType;
  70. import com.aliyuncs.profile.DefaultProfile;
  71. import com.aliyuncs.profile.IClientProfile;
  72. import com.itextpdf.text.Document;
  73. import com.itextpdf.text.pdf.BaseFont;
  74. import com.itextpdf.text.pdf.PdfContentByte;
  75. import com.itextpdf.text.pdf.PdfImportedPage;
  76. import com.itextpdf.text.pdf.PdfReader;
  77. import com.itextpdf.text.pdf.PdfWriter;
  78. /**
  79. * @Title: Controller
  80. * @Description: 文件管理表
  81. * @author onlineGenerator
  82. * @date 2017-07-29 15:00:16
  83. * @version V1.0
  84. *
  85. */
  86. @Controller
  87. @RequestMapping("/tSysFileController")
  88. public class TSysFileController extends BaseController {
  89. /**
  90. * Logger for this class
  91. */
  92. private static final Logger logger = Logger.getLogger(TSysFileController.class);
  93. @Autowired
  94. private TSysFileServiceI tSysFileService;
  95. @Autowired
  96. private SystemService systemService;
  97. // 下载路径
  98. private static final String showAndDownUrl = ResourceUtil.getConfigByName("showAndDownUrl");
  99. /**
  100. * 文件管理表列表 页面跳转
  101. *
  102. * @return
  103. */
  104. @RequestMapping(params = "list")
  105. public ModelAndView list(HttpServletRequest request, HttpServletRequest req,WebUploadEntity webUpload) {
  106. if (null == webUpload) {
  107. webUpload = new WebUploadEntity();
  108. }
  109. String curUserName = ResourceUtil.getSessionUser().getUserName();
  110. req.setAttribute("curUserName", curUserName);
  111. req.setAttribute("webUpload", webUpload);
  112. req.setAttribute("showAndDownUrl", showAndDownUrl);
  113. return new ModelAndView("cn/com/lzt/common/tSysFileList");
  114. }
  115. /**
  116. * easyui AJAX请求数据
  117. *
  118. * @param request
  119. * @param response
  120. * @param dataGrid
  121. */
  122. @RequestMapping(params = "datagrid")
  123. public void datagrid(TSysFileEntity tSysFile,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  124. CriteriaQuery cq = new CriteriaQuery(TSysFileEntity.class, dataGrid);
  125. //查询条件组装器
  126. org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, tSysFile, request.getParameterMap());
  127. try{
  128. //自定义追加查询条件
  129. }catch (Exception e) {
  130. throw new BusinessException(e.getMessage());
  131. }
  132. cq.add();
  133. this.tSysFileService.getDataGridReturn(cq, true);
  134. // 设置是否预览Flg
  135. List<TSysFileEntity> list = new ArrayList<>();
  136. for(int i = 0; i < dataGrid.getResults().size(); i++) {
  137. TSysFileEntity dbEntity = (TSysFileEntity) dataGrid.getResults().get(i);
  138. TSysFileEntity tSysFileEntity = new TSysFileEntity();
  139. try {
  140. BeanUtils.copyProperties(tSysFileEntity,dbEntity);
  141. } catch (IllegalAccessException e) {
  142. e.printStackTrace();
  143. } catch (InvocationTargetException e) {
  144. e.printStackTrace();
  145. }
  146. String fileName = tSysFileEntity.getFileName();
  147. String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
  148. if("jpg".equals(fileType) || "jpeg".equals(fileType) ||"png".equals(fileType) || "pdf".equals(fileType)) {
  149. tSysFileEntity.setIsPreviewFlg("1");
  150. boolean aliyunflg = showAndDownUrl.indexOf("aliyun")!=-1;
  151. String dbpath=null;
  152. if("0".equals(aliyunflg)) {
  153. dbpath = "showOrDownByurl.do?dbPath=" + tSysFileEntity.getFileUrl();
  154. } else {
  155. dbpath = request.getContextPath()+"/tSysFileController/aliyunshowOrDownByurl.do?dbPath=" + tSysFileEntity.getFileUrl();
  156. }
  157. tSysFileEntity.setPreviewUrl(dbpath);
  158. } else {
  159. tSysFileEntity.setIsPreviewFlg("0");
  160. }
  161. String userName = tSysFileEntity.getCreateBy();
  162. String realName = "";
  163. // 查询主组织
  164. StringBuilder getRealNameByUserNameSql = new StringBuilder();
  165. getRealNameByUserNameSql.append(" SELECT ");
  166. getRealNameByUserNameSql.append(" realname ");
  167. getRealNameByUserNameSql.append(" FROM t_s_base_user ");
  168. getRealNameByUserNameSql.append(" WHERE ");
  169. getRealNameByUserNameSql.append(" username = '" + userName + "'");
  170. List<Map<String, Object>> realNameMapList = systemService.findForJdbc(getRealNameByUserNameSql.toString());
  171. if(realNameMapList.size() > 0) {
  172. realName = (String)realNameMapList.get(0).get("realname");
  173. }
  174. tSysFileEntity.setCreateBy(realName);
  175. list.add(tSysFileEntity);
  176. }
  177. dataGrid.setResults(list);
  178. TagUtil.datagrid(response, dataGrid);
  179. }
  180. /**
  181. * 删除文件管理表
  182. *
  183. * @return
  184. */
  185. @RequestMapping(params = "doDel")
  186. @ResponseBody
  187. public AjaxJson doDel(TSysFileEntity tSysFile, HttpServletRequest request) {
  188. String message = MutiLangUtil.getMutiLangInstance().getLang("文件删除成功");
  189. AjaxJson j = new AjaxJson();
  190. tSysFile = systemService.getEntity(TSysFileEntity.class, tSysFile.getId());
  191. try{
  192. String path = tSysFile.getFileUrl();
  193. // deletefile(path, j);
  194. deletefile(path, tSysFile.getBusiId(), j);
  195. //systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
  196. }catch(Exception e){
  197. e.printStackTrace();
  198. message = MutiLangUtil.getMutiLangInstance().getLang("文件删除失败");
  199. throw new BusinessException(e.getMessage());
  200. }
  201. j.setMsg(message);
  202. return j;
  203. }
  204. /**
  205. * 添加文件管理表
  206. *
  207. * @return
  208. */
  209. @RequestMapping(params = "doAdd")
  210. @ResponseBody
  211. public AjaxJson doAdd(TSysFileEntity tSysFile, HttpServletRequest request) {
  212. String message = null;
  213. AjaxJson j = new AjaxJson();
  214. message = "文件添加成功";
  215. try{
  216. tSysFileService.save(tSysFile);
  217. systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
  218. }catch(Exception e){
  219. e.printStackTrace();
  220. message = "文件添加失败";
  221. throw new BusinessException(e.getMessage());
  222. }
  223. j.setMsg(message);
  224. return j;
  225. }
  226. /**
  227. * 跳转至图片预览页面
  228. * @param fileUrl 文件的访问路径
  229. * @param req
  230. * @return
  231. */
  232. @RequestMapping(value="showViewFile",method = RequestMethod.GET)
  233. public ModelAndView showViewFile(String fileUrl, String aliyunflg, HttpServletRequest req) {
  234. if (FileUtils.isPicture(FileUtils.getExtend(fileUrl))) {
  235. return this.showPictureview(fileUrl, aliyunflg, req);
  236. }else{
  237. return this.showPdfView(fileUrl, aliyunflg, req);
  238. }
  239. }
  240. /**
  241. * 跳转至图片预览页面
  242. * @param fileUrl 文件的访问路径
  243. * @param req
  244. * @return
  245. */
  246. @RequestMapping(params = "showPictureview")
  247. public ModelAndView showPictureview(String fileUrl, String aliyunflg, HttpServletRequest req) {
  248. if (FileUtils.isPicture(FileUtils.getExtend(fileUrl))) {
  249. List<TSysFileEntity> tSysFiles = systemService.findByProperty(TSysFileEntity.class, "fileUrl", fileUrl);
  250. if (ListUtils.isNullOrEmpty(tSysFiles)) {
  251. req.setAttribute("errormsg",MutiLangUtil.getMutiLangInstance().getLang("文件不存在"));
  252. return new ModelAndView("cn/com/lzt/pdf/web/pdfviewiframe");
  253. }else{
  254. String dbpath = "";
  255. if("0".equals(aliyunflg)) {
  256. dbpath = "showOrDownByurl.do?dbPath=" + fileUrl;
  257. } else {
  258. dbpath = "aliyunshowOrDownByurl.do?dbPath=" + fileUrl;
  259. }
  260. req.setAttribute("dbpath",dbpath);
  261. }
  262. return new ModelAndView("cn/com/lzt/pdf/web/pictureview");
  263. }else{
  264. req.setAttribute("errormsg",MutiLangUtil.getMutiLangInstance().getLang("文件类型错误"));
  265. return new ModelAndView("cn/com/lzt/pdf/web/pdfviewiframe");
  266. }
  267. }
  268. /**
  269. * 跳转至pdf 预览页面
  270. * @param fileUrl 文件的访问路径
  271. * @param req
  272. * @return
  273. */
  274. @RequestMapping(params = "showpdfview")
  275. public ModelAndView showPdfView(String fileUrl, String aliyunflg, HttpServletRequest req) {
  276. String encryptpdf = req.getParameter("encryptpdf");
  277. boolean bEncryptpdf = StringUtils.isNotEmpty(encryptpdf) && encryptpdf.equals("1") && fileUrl.indexOf("pdf") > -1;
  278. if (oConvertUtils.isNotEmpty(fileUrl)&&fileUrl.toLowerCase().endsWith("pdf")) {
  279. List<TSysFileEntity> tSysFiles = systemService.findByProperty(TSysFileEntity.class, "fileUrl", fileUrl);
  280. if (ListUtils.isNullOrEmpty(tSysFiles)) {
  281. req.setAttribute("errormsg",MutiLangUtil.getMutiLangInstance().getLang("文件不存在"));
  282. return new ModelAndView("cn/com/lzt/pdf/web/pdfviewiframe");
  283. }
  284. String dbpath = "";
  285. if("0".equals(aliyunflg)) {
  286. dbpath = "showOrDownByurl.do?down=1&dbPath=" + fileUrl;
  287. } else {
  288. dbpath = "aliyunshowOrDownByurl.do?down=1&dbPath=" + fileUrl;
  289. if(StringUtils.isNotEmpty(tSysFiles.get(0).getUserpass()) && bEncryptpdf){
  290. sendPassToUser(tSysFiles.get(0).getFileName(),tSysFiles.get(0).getUserpass());
  291. }
  292. }
  293. req.setAttribute("dbpath",dbpath);
  294. return new ModelAndView("cn/com/lzt/pdf/web/pdfview");
  295. }else{
  296. req.setAttribute("errormsg",MutiLangUtil.getMutiLangInstance().getLang("文件类型错误"));
  297. return new ModelAndView("cn/com/lzt/pdf/web/pdfviewiframe");
  298. }
  299. // return new ModelAndView("cn/com/lzt/pdfiframe/web/pdfviewiframe");
  300. }
  301. /**
  302. * 阿里云oss存储
  303. * @author yulong.zhao
  304. * @date 2017年12月28日下午5:04:36
  305. *
  306. * @param request
  307. * @param response
  308. * @return
  309. */
  310. @RequestMapping("/aliyunfiledeal")
  311. @ResponseBody
  312. public AjaxJson aliyunfiledeal(HttpServletRequest request, HttpServletResponse response) {
  313. AjaxJson j = new AjaxJson();
  314. String msg = "";
  315. String key = "";
  316. String upFlag = oConvertUtils.getString(request.getParameter("isup"));
  317. String delFlag = oConvertUtils.getString(request.getParameter("isdel"));
  318. String busiId = oConvertUtils.getString(request.getParameter("busiId"));
  319. String encryptpdf = oConvertUtils.getString(request.getParameter("encryptpdf"));
  320. String singlemode = oConvertUtils.getString(request.getParameter("singlemode")).toLowerCase();
  321. try {
  322. //如果是上传操作
  323. if("1".equals(upFlag)){
  324. long start = System.currentTimeMillis();
  325. System.out.println("oss-start:"+start);
  326. String fileName = null;
  327. String bizType = request.getParameter("bizType");//上传业务名称
  328. if ("true".equals(singlemode)) {
  329. tSysFileService.deleteByBusiId(busiId, bizType);
  330. }
  331. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
  332. MultipartFile mf = multipartRequest.getFile("file");// 获取上传文件对象
  333. boolean bEncryptpdf = StringUtils.isNotEmpty(encryptpdf) && encryptpdf.equals("1") && mf.getContentType().indexOf("pdf") > -1;
  334. //zbw去除文件名中空格
  335. fileName = removeInternalBlank(mf.getOriginalFilename());// 获取文件名
  336. String extName = FileUtils.getExtend(fileName);
  337. String uuid = UUID.randomUUID().toString();
  338. // 创建上传Object的Metadata
  339. ObjectMetadata meta = new ObjectMetadata();
  340. // 设置contenttype否则上传图片在oss上预览时不显示图片
  341. meta.setContentType(mf.getContentType());
  342. key = String.format(bizType+"/%s", uuid+"."+extName);
  343. OSSClient ossClient = new OSSClient(CustomerConstant.ENDPOINT, CustomerConstant.ACCESSKEY_ID, CustomerConstant.ACCESSKEY_SECRET);
  344. String user_pass=null;
  345. String owner_pass = null;
  346. byte[] mfEncryptedByte = null;
  347. // 必须设置ContentLength
  348. meta.setContentLength(mf.getBytes().length);
  349. //加密处理
  350. if(bEncryptpdf) {
  351. user_pass = generateWord();
  352. owner_pass = user_pass;
  353. System.out.print(owner_pass+user_pass);
  354. mfEncryptedByte = EncryptPDF(request,mf, user_pass, owner_pass);
  355. // 必须设置ContentLength
  356. meta.setContentLength(mfEncryptedByte.length);
  357. }
  358. ossClient.putObject(CustomerConstant.BUCKETNAME, key, new ByteArrayInputStream(mfEncryptedByte == null || mfEncryptedByte.length == 0 ? mf.getBytes():mfEncryptedByte),meta);
  359. // 关闭client
  360. ossClient.shutdown();
  361. msg = MutiLangUtil.getMutiLangInstance().getLang("common.upload.success");
  362. j.setMsg(msg);
  363. long end = System.currentTimeMillis();
  364. System.out.println("oss-end:"+end);
  365. System.out.println("cost: "+(end-start)/1000);
  366. System.out.println("oss-start:"+System.currentTimeMillis());
  367. String dbpath = bizType + "/" + uuid + "." + extName;
  368. String busiTable = request.getParameter("busiTable");
  369. String remark = request.getParameter("remark");
  370. TSysFileEntity tSysFileEntity = new TSysFileEntity();
  371. tSysFileEntity.setBusiId(busiId);//业务id
  372. tSysFileEntity.setFileUrl(dbpath);//文件访问路径
  373. tSysFileEntity.setFileName(fileName);//文件名称
  374. tSysFileEntity.setTagetType(bizType);//文件类型
  375. tSysFileEntity.setBusiTable(oConvertUtils.getString(busiTable));
  376. tSysFileEntity.setRemark(oConvertUtils.getString(remark));
  377. tSysFileEntity.setUserpass(user_pass);
  378. tSysFileEntity.setOwnerpass(owner_pass);
  379. tSysFileService.save(tSysFileEntity);
  380. j.setObj(tSysFileEntity.getId());
  381. //1、将文件路径赋值给obj,前台可获取之,随表单提交,然后数据库中存储该路径
  382. //2、demo这里用的是AjaxJson对象,开发者可自定义返回对象,但是用t标签的时候路径属性名需为 obj或 filePath 或自己在标签内指定若在标签内指定则action返回路径的名称应保持一致
  383. //如果是删除操作
  384. }else if("1".equals(delFlag)){
  385. String path = oConvertUtils.getString(request.getParameter("path"));
  386. if(path.length()>32){//编辑时传入参数是path,新建传入fileid
  387. deletefile(path, busiId, j);
  388. }else{
  389. TSysFileEntity file = tSysFileService.getEntity(TSysFileEntity.class, path);
  390. if(file != null && !"".equals(oConvertUtils.getString(file.getFileUrl()))){
  391. deletefile(file.getFileUrl(), busiId, j);
  392. }
  393. }
  394. }else{
  395. throw new BusinessException("没有传参指定上传还是删除操作!");
  396. }
  397. } catch (IOException e) {
  398. j.setSuccess(false);
  399. logger.info(e.getMessage());
  400. }catch (BusinessException b) {
  401. j.setSuccess(false);
  402. logger.info(b.getMessage());
  403. } catch (Exception e) {
  404. j.setSuccess(false);
  405. logger.info(e.getMessage());
  406. }
  407. Map<String, Object> attributes = new HashMap<String, Object>();
  408. attributes.put("key", key);
  409. j.setAttributes(attributes);
  410. j.setMsg(msg);
  411. return j;
  412. }
  413. /*
  414. * PDF加密
  415. * */
  416. private byte[] EncryptPDF(HttpServletRequest request,MultipartFile PDFFile,String USER_PASS,String OWNER_PASS) {
  417. String realpath = request.getSession().getServletContext().getRealPath("").replaceAll("\\\\", "/")+"/upload/";
  418. String uuid = com.xcgl.utils.UUID.randomUUID().toString();
  419. Document document = new Document();
  420. FileOutputStream outputStream = null;
  421. String tempFile = realpath+uuid+".pdf";
  422. byte[] encryptedPDF= null;
  423. try {
  424. outputStream = new FileOutputStream(tempFile);
  425. // Create Readers for the pdfs.
  426. PdfReader pdfReader = new PdfReader(PDFFile.getBytes());
  427. // Create a writer for the outputstream
  428. PdfWriter writer = PdfWriter.getInstance(document, outputStream);
  429. writer.setEncryption(USER_PASS.getBytes(), OWNER_PASS.getBytes(), PdfWriter.ALLOW_SCREENREADERS,PdfWriter.STANDARD_ENCRYPTION_128);
  430. document.open();
  431. PdfContentByte cb = writer.getDirectContent(); // Holds the PDF
  432. PdfImportedPage page;
  433. int pageOfCurrentReaderPDF = 0;
  434. // Create a new page in the target for each source page.
  435. while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
  436. document.newPage();
  437. pageOfCurrentReaderPDF++;
  438. page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF);
  439. cb.addTemplate(page, 0, 0);
  440. }
  441. outputStream.flush();
  442. document.close();
  443. outputStream.close();
  444. } catch (Exception e) {
  445. e.printStackTrace();
  446. } finally {
  447. if (document.isOpen())
  448. document.close();
  449. try {
  450. if (outputStream != null)
  451. outputStream.close();
  452. } catch (IOException ioe) {
  453. ioe.printStackTrace();
  454. }
  455. }
  456. FileInputStream is = null;
  457. try {
  458. is = new FileInputStream(tempFile);
  459. encryptedPDF = new byte[is.available()];
  460. is.read(encryptedPDF);
  461. is.close();
  462. File tempPDF = new File(tempFile);
  463. tempPDF.delete();
  464. } catch (Exception e) {
  465. e.printStackTrace();
  466. }finally {
  467. try {
  468. if (is != null)
  469. is.close();
  470. } catch (IOException ioe) {
  471. ioe.printStackTrace();
  472. }
  473. }
  474. return encryptedPDF;
  475. }
  476. /*
  477. * 生成4位的随机密码
  478. * */
  479. private String generateWord() {
  480. String[] beforeShuffle = new String[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
  481. "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i",
  482. "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
  483. List list = Arrays.asList(beforeShuffle);
  484. Collections.shuffle(list);
  485. StringBuilder sb = new StringBuilder();
  486. for (int i = 0; i < list.size(); i++) {
  487. sb.append(list.get(i));
  488. }
  489. String afterShuffle = sb.toString();
  490. String result = afterShuffle.substring(5, 9);
  491. return result;
  492. }
  493. /**
  494. * 去除字符串内部空格
  495. */
  496. public static String removeInternalBlank(String s) {
  497. // System.out.println("bb:" + s);
  498. Pattern p = Pattern.compile("\\s*|\t|\r|\n");
  499. Matcher m = p.matcher(s);
  500. String after = m.replaceAll("");
  501. return after;
  502. }
  503. /**
  504. * 员工基本档案管理批量上传
  505. * @author zbw
  506. * 2018-1-15
  507. * @return
  508. */
  509. /*@RequestMapping("/aliyunfiledealBatch")
  510. @ResponseBody
  511. public AjaxJson aliyunfiledealBatch(HttpServletRequest request, HttpServletResponse response) {
  512. AjaxJson j = new AjaxJson();
  513. String msg = "";
  514. String upFlag = oConvertUtils.getString(request.getParameter("isup"));
  515. String delFlag = oConvertUtils.getString(request.getParameter("isdel"));
  516. String busiId = oConvertUtils.getString(request.getParameter("busiId"));
  517. String singlemode = oConvertUtils.getString(request.getParameter("singlemode")).toLowerCase();
  518. try {
  519. //如果是上传操作
  520. if("1".equals(upFlag)){
  521. String fileName = null;
  522. String bizType = request.getParameter("bizType");//上传业务名称
  523. // 张兵伟员工基本档案管理批量上传,重复则删除start
  524. if(busiId != null && Globals.busi_id_batch.equals(busiId)){// 批量上传
  525. Map<String, Map<String, String>> tSysFileEntityMap=this.getSysFileData(bizType);
  526. if(tSysFileEntityMap!=null&&tSysFileEntityMap.get(bizType) != null){
  527. if(tSysFileEntityMap.get(bizType).get(fileName) != null && tSysFileEntityMap.get(bizType).get(fileName).length() != 0){
  528. // deletefile(tSysFileEntityMap.get(bizType).get(fileName), j);
  529. deletefile(tSysFileEntityMap.get(bizType).get(fileName), busiId, j);
  530. }
  531. }
  532. }
  533. // 张兵伟员工基本档案管理批量上传,重复则删除start
  534. if ("true".equals(singlemode)) {
  535. tSysFileService.deleteByBusiId(busiId, bizType);
  536. }
  537. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
  538. MultipartFile mf = multipartRequest.getFile("file");// 获取上传文件对象
  539. fileName = mf.getOriginalFilename();// 获取文件名
  540. String extName = FileUtils.getExtend(fileName);
  541. String uuid = UUID.randomUUID().toString();
  542. // 创建上传Object的Metadata
  543. ObjectMetadata meta = new ObjectMetadata();
  544. // 设置contenttype否则上传图片在oss上预览时不显示图片
  545. meta.setContentType(mf.getContentType());
  546. // 必须设置ContentLength
  547. meta.setContentLength(mf.getBytes().length);
  548. // 创建OSSClient实例
  549. OSSClient ossClient = new OSSClient(CustomerConstant.ENDPOINT, CustomerConstant.ACCESSKEY_ID, CustomerConstant.ACCESSKEY_SECRET);
  550. String key = String.format(bizType+"/%s", uuid+"."+extName);
  551. ossClient.putObject(CustomerConstant.BUCKETNAME, key, new ByteArrayInputStream(mf.getBytes()),meta);
  552. // 关闭client
  553. ossClient.shutdown();
  554. msg = MutiLangUtil.getMutiLangInstance().getLang("common.upload.success");
  555. j.setMsg(msg);
  556. String dbpath = bizType + "/" + uuid + "." + extName;
  557. String busiTable = request.getParameter("busiTable");
  558. String remark = request.getParameter("remark");
  559. TSysFileEntity tSysFileEntity = new TSysFileEntity();
  560. tSysFileEntity.setBusiId(busiId);//业务id
  561. tSysFileEntity.setFileUrl(dbpath);//文件访问路径
  562. tSysFileEntity.setFileName(fileName);//文件名称
  563. tSysFileEntity.setTagetType(bizType);//文件类型
  564. tSysFileEntity.setBusiTable(oConvertUtils.getString(busiTable));
  565. tSysFileEntity.setRemark(oConvertUtils.getString(remark));
  566. tSysFileService.save(tSysFileEntity);
  567. j.setObj(tSysFileEntity.getId());
  568. //1、将文件路径赋值给obj,前台可获取之,随表单提交,然后数据库中存储该路径
  569. //2、demo这里用的是AjaxJson对象,开发者可自定义返回对象,但是用t标签的时候路径属性名需为 obj或 filePath 或自己在标签内指定若在标签内指定则action返回路径的名称应保持一致
  570. //如果是删除操作
  571. }else if("1".equals(delFlag)){
  572. String path = oConvertUtils.getString(request.getParameter("path"));
  573. if(path.length()>32){//编辑时传入参数是path,新建传入fileid
  574. deletefile(path, busiId, j);
  575. }else{
  576. TSysFileEntity file = tSysFileService.getEntity(TSysFileEntity.class, path);
  577. if(file != null && !"".equals(oConvertUtils.getString(file.getFileUrl()))){
  578. deletefile(file.getFileUrl(), busiId, j);
  579. }
  580. }
  581. }else{
  582. throw new BusinessException("没有传参指定上传还是删除操作!");
  583. }
  584. } catch (IOException e) {
  585. j.setSuccess(false);
  586. logger.info(e.getMessage());
  587. }catch (BusinessException b) {
  588. j.setSuccess(false);
  589. logger.info(b.getMessage());
  590. } catch (Exception e) {
  591. j.setSuccess(false);
  592. logger.info(e.getMessage());
  593. }
  594. j.setMsg(msg);
  595. return j;
  596. }*/
  597. public Map<String, Map<String, String>> getSysFileData(String tagetType) {
  598. Map<String, Map<String, String>> tSysFileEntityMap = null;
  599. StringBuffer hql = new StringBuffer(" from TSysFileEntity where busiId=? and tagetType=? ");
  600. List<TSysFileEntity> tSysFileEntityList = systemService.findHql(hql.toString(),Globals.busi_id_batch,tagetType);
  601. //获取所有文件名称 结构 Map<taget_type,Map<file_name,file_url>>
  602. tSysFileEntityMap = new HashMap<String, Map<String, String>>();
  603. for (int i = 0; i < tSysFileEntityList.size(); i++) {
  604. Map<String, String> tempMap = new HashMap<String, String>();
  605. tempMap.put(tSysFileEntityList.get(i).getFileName(),tSysFileEntityList.get(i).getFileUrl());
  606. if(tSysFileEntityMap.size()==0){
  607. tSysFileEntityMap.put(tSysFileEntityList.get(i).getTagetType(), tempMap);
  608. }else{
  609. if(!tSysFileEntityMap.containsKey(tSysFileEntityList.get(i).getTagetType())){
  610. tSysFileEntityMap.put(tSysFileEntityList.get(i).getTagetType(), tempMap);
  611. }else{
  612. tSysFileEntityMap.get(tSysFileEntityList.get(i).getTagetType()).putAll(tempMap);
  613. }
  614. }
  615. }
  616. return tSysFileEntityMap;
  617. }
  618. /**
  619. * WebUploader
  620. * 文件上传处理/删除处理
  621. */
  622. @RequestMapping("/filedeal")
  623. @ResponseBody
  624. public AjaxJson filedeal(HttpServletRequest request, HttpServletResponse response) {
  625. AjaxJson j = new AjaxJson();
  626. String msg = "";
  627. String upFlag = oConvertUtils.getString(request.getParameter("isup"));
  628. String delFlag = oConvertUtils.getString(request.getParameter("isdel"));
  629. String busiId = oConvertUtils.getString(request.getParameter("busiId"));
  630. String singlemode = oConvertUtils.getString(request.getParameter("singlemode")).toLowerCase();
  631. //String ctxPath = request.getSession().getServletContext().getRealPath("");
  632. String ctxPath = ResourceUtil.getConfigByName("webUploadpath");
  633. /*Map<String, Map<String, String>> tSysFileEntityMap = null;
  634. if(busiId != null && Globals.busi_id_batch.equals(busiId)){// 批量上传
  635. // 张兵伟添加的删除方法start
  636. StringBuffer hql = new StringBuffer(" from TSysFileEntity where busiId=? ");
  637. List<TSysFileEntity> tSysFileEntityList = systemService.findHql(hql.toString(),Globals.busi_id_batch);
  638. //获取所有文件名称 结构 Map<taget_type,Map<file_name,file_url>>
  639. tSysFileEntityMap = new HashMap<String, Map<String, String>>();
  640. for (int i = 0; i < tSysFileEntityList.size(); i++) {
  641. Map<String, String> tempMap = new HashMap<String, String>();
  642. tempMap.put(tSysFileEntityList.get(i).getFileName(),tSysFileEntityList.get(i).getFileUrl());
  643. if(tSysFileEntityMap.size()==0){
  644. tSysFileEntityMap.put(tSysFileEntityList.get(i).getTagetType(), tempMap);
  645. }else{
  646. if(!tSysFileEntityMap.containsKey(tSysFileEntityList.get(i).getTagetType())){
  647. tSysFileEntityMap.put(tSysFileEntityList.get(i).getTagetType(), tempMap);
  648. }else{
  649. tSysFileEntityMap.get(tSysFileEntityList.get(i).getTagetType()).putAll(tempMap);
  650. }
  651. }
  652. }
  653. // 张兵伟添加的删除方法end
  654. }*/
  655. try {
  656. //如果是上传操作
  657. if("1".equals(upFlag)){
  658. String fileName = null;
  659. String bizType = request.getParameter("bizType");//上传业务名称
  660. File file = new File(ctxPath+File.separator+bizType);
  661. if (!file.exists()) {
  662. file.mkdirs();// 创建文件根目录
  663. }
  664. if ("true".equals(singlemode)) {
  665. tSysFileService.deleteByBusiId(busiId, bizType);
  666. }
  667. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
  668. MultipartFile mf = multipartRequest.getFile("file");// 获取上传文件对象
  669. fileName = mf.getOriginalFilename();// 获取文件名
  670. // 张兵伟员工基本档案管理批量上传,重复则删除start
  671. if(busiId != null && Globals.busi_id_batch.equals(busiId)){// 批量上传
  672. Map<String, Map<String, String>> tSysFileEntityMap=this.getSysFileData(bizType);
  673. if(tSysFileEntityMap!=null&&tSysFileEntityMap.get(bizType) != null){
  674. if(tSysFileEntityMap.get(bizType).get(fileName) != null && tSysFileEntityMap.get(bizType).get(fileName).length() != 0){
  675. // deletefile(tSysFileEntityMap.get(bizType).get(fileName), j);
  676. deletefile(tSysFileEntityMap.get(bizType).get(fileName), busiId, j);
  677. }
  678. }
  679. }
  680. // 张兵伟员工基本档案管理批量上传,重复则删除start
  681. String extName = FileUtils.getExtend(fileName);
  682. String uuid = UUID.randomUUID().toString();
  683. String savePath = file.getPath() + File.separator + uuid +"." + extName;
  684. File savefile = new File(savePath);
  685. FileCopyUtils.copy(mf.getBytes(), savefile);
  686. msg = MutiLangUtil.getMutiLangInstance().getLang("common.upload.success");
  687. j.setMsg(msg);
  688. String dbpath = bizType + "/" + uuid + "." + extName;
  689. String busiTable = request.getParameter("busiTable");
  690. String remark = request.getParameter("remark");
  691. TSysFileEntity tSysFileEntity = new TSysFileEntity();
  692. tSysFileEntity.setBusiId(busiId);//业务id
  693. tSysFileEntity.setFileUrl(dbpath);//文件访问路径
  694. tSysFileEntity.setFileName(fileName);//文件名称
  695. tSysFileEntity.setTagetType(bizType);//文件类型
  696. tSysFileEntity.setBusiTable(oConvertUtils.getString(busiTable));
  697. tSysFileEntity.setRemark(oConvertUtils.getString(remark));
  698. tSysFileService.save(tSysFileEntity);
  699. j.setObj(tSysFileEntity.getId());
  700. //1、将文件路径赋值给obj,前台可获取之,随表单提交,然后数据库中存储该路径
  701. //2、demo这里用的是AjaxJson对象,开发者可自定义返回对象,但是用t标签的时候路径属性名需为 obj或 filePath 或自己在标签内指定若在标签内指定则action返回路径的名称应保持一致
  702. //如果是删除操作
  703. }else if("1".equals(delFlag)){
  704. String path = request.getParameter("path");
  705. if(busiId != null && Globals.busi_id_batch.equals(busiId)){//批量上传
  706. deletefile(path, busiId, j);
  707. }else{
  708. if(path.length()>32){//编辑时传入参数是path,新建传入fileid
  709. deletefile(path, busiId, j);
  710. }else{
  711. TSysFileEntity file = tSysFileService.getEntity(TSysFileEntity.class, path);
  712. if(file != null && !"".equals(oConvertUtils.getString(file.getFileUrl()))){
  713. deletefile(file.getFileUrl(), busiId, j);
  714. }
  715. }
  716. }
  717. }else{
  718. throw new BusinessException("没有传参指定上传还是删除操作!");
  719. }
  720. } catch (IOException e) {
  721. j.setSuccess(false);
  722. logger.info(e.getMessage());
  723. }catch (BusinessException b) {
  724. j.setSuccess(false);
  725. logger.info(b.getMessage());
  726. } catch (Exception e) {
  727. j.setSuccess(false);
  728. logger.info(e.getMessage());
  729. }
  730. j.setMsg(msg);
  731. return j;
  732. }
  733. /**
  734. * 删除物理地址文件
  735. * @author zhijia.wang
  736. * @param path
  737. * @param j
  738. * @throws Exception
  739. */
  740. private void deletefile(String path, String busiId, AjaxJson j) throws Exception {
  741. String msg = "";
  742. //不是阿里云上传
  743. if("tSysFileController/filedeal.do".equals(ResourceUtil.getConfigByName("fileDeal"))){
  744. String ctxPath = ResourceUtil.getConfigByName("webUploadpath");// demo中设置为D://upFiles,实际项目应因事制宜
  745. String delpath = ctxPath + File.separator + path;
  746. File fileDelete = new File(delpath);
  747. tSysFileService.deleteByUrlPath(path, busiId);
  748. if (!fileDelete.exists() || !fileDelete.isFile()) {
  749. msg = MutiLangUtil.getMutiLangInstance().getLang("file.warn.filelost");
  750. // 不存在前台也给他删除
  751. j.setSuccess(true);
  752. j.setMsg(msg);
  753. } else {
  754. if (fileDelete.delete()) {
  755. msg = MutiLangUtil.getMutiLangInstance().getLang("file.delete.success");
  756. j.setMsg(msg);
  757. } else {
  758. j.setSuccess(false);
  759. msg = MutiLangUtil.getMutiLangInstance().getLang("file.delete.fail");
  760. j.setMsg(msg);
  761. }
  762. }
  763. }
  764. //阿里云上传
  765. if("tSysFileController/aliyunfiledeal.do".equals(ResourceUtil.getConfigByName("fileDeal"))){
  766. tSysFileService.deleteByUrlPath(path, busiId);
  767. if(!"".equals(oConvertUtils.getString(path))){
  768. String key = path;
  769. // 创建OSSClient实例
  770. OSSClient ossClient = new OSSClient(CustomerConstant.ENDPOINT, CustomerConstant.ACCESSKEY_ID, CustomerConstant.ACCESSKEY_SECRET);
  771. // Object是否存在
  772. boolean found = ossClient.doesObjectExist(CustomerConstant.BUCKETNAME, key);
  773. if(found){
  774. ossClient.deleteObject(CustomerConstant.BUCKETNAME, key);
  775. ossClient.shutdown();
  776. }else{
  777. msg = MutiLangUtil.getMutiLangInstance().getLang("file.warn.filelost");
  778. // 不存在前台也给他删除
  779. j.setSuccess(true);
  780. j.setMsg(msg);
  781. }
  782. }else{
  783. msg = MutiLangUtil.getMutiLangInstance().getLang("file.warn.filelost");
  784. // 不存在前台也给他删除
  785. j.setSuccess(true);
  786. j.setMsg(msg);
  787. }
  788. }
  789. }
  790. /**
  791. * 删除物理地址文件
  792. * @param path
  793. * @param j
  794. * @throws Exception
  795. */
  796. private void deletefile(String path, AjaxJson j) throws Exception {
  797. String msg = "";
  798. String ctxPath = ResourceUtil.getConfigByName("webUploadpath");
  799. String delpath = ctxPath + File.separator + path;
  800. File fileDelete = new File(delpath);
  801. tSysFileService.deleteByUrlPath(path);
  802. if (!fileDelete.exists() || !fileDelete.isFile()) {
  803. msg = MutiLangUtil.getMutiLangInstance().getLang("file.warn.filelost");
  804. // 不存在前台也给他删除
  805. j.setSuccess(true);
  806. j.setMsg(msg);
  807. } else {
  808. if (fileDelete.delete()) {
  809. msg = MutiLangUtil.getMutiLangInstance().getLang("file.delete.success");
  810. j.setMsg(msg);
  811. } else {
  812. j.setSuccess(false);
  813. msg = MutiLangUtil.getMutiLangInstance().getLang("file.delete.fail");
  814. j.setMsg(msg);
  815. }
  816. }
  817. }
  818. /**
  819. * 通过业务主键获取当前主键下 此code 下的文件列表
  820. * @param request
  821. * @param response
  822. * @return
  823. */
  824. @RequestMapping("/getFilelistByBusikey")
  825. @ResponseBody
  826. public AjaxJson getFilelistByBusikey(HttpServletRequest request, HttpServletResponse response){
  827. String bizType=request.getParameter("bizType");
  828. String busiId=request.getParameter("busiId");
  829. AjaxJson j = new AjaxJson();
  830. String msg = "";
  831. if (StringUtil.isNotEmpty(busiId)&&StringUtil.isNotEmpty(bizType)) {
  832. try {
  833. List<TSysFileEntity> entities = tSysFileService.getSysFileEntitiesByBusiId(busiId,bizType);
  834. StringBuffer url = new StringBuffer();
  835. StringBuffer filename = new StringBuffer();
  836. url.append("");
  837. filename.append("");
  838. for (int i = 0; i < entities.size(); i++) {
  839. url.append(entities.get(i).getFileUrl());
  840. url.append(",");
  841. filename.append(entities.get(i).getFileName());
  842. filename.append(",");
  843. }
  844. HashMap<String, String> map = new HashMap<String, String>();
  845. map.put("url", url.toString());
  846. map.put("filename", filename.toString());
  847. map.put("filelist", JSONObject.toJSONString(entities));
  848. j.setObj(map);
  849. } catch (Exception e) {
  850. e.getStackTrace();
  851. }
  852. }
  853. return j;
  854. }
  855. /**
  856. * 阿里云文件下载及查看
  857. * @author yulong.zhao
  858. * @date 2017年12月28日下午5:58:01
  859. * @param response
  860. * @param request
  861. * @throws Exception
  862. */
  863. @RequestMapping(value="aliyunshowOrDownByurl", method = RequestMethod.GET)
  864. public void getAliyunImgByurl(HttpServletResponse response, HttpServletRequest request) throws Exception{
  865. String flag = request.getParameter("down");//是否下载否则展示图片
  866. String dbpath = oConvertUtils.getString(request.getParameter("dbPath"));
  867. String fileName = tSysFileService.getFileNameByurlPath(dbpath);
  868. String singlemode = oConvertUtils.getString(request.getParameter("singlemode")).toLowerCase();
  869. String encryptpdf = request.getParameter("encryptpdf");
  870. boolean bEncryptpdf = StringUtils.isNotEmpty(encryptpdf) && encryptpdf.equals("1") && fileName.indexOf("pdf") > -1;
  871. if("1".equals(flag)){
  872. BrowserType browerType = BrowserUtils.getBrowserType(request);
  873. if(browerType!=null && browerType.equals(BrowserType.Safari))
  874. {
  875. response.setContentType("application/octet-stream;charset=utf-8");
  876. }else {
  877. response.setContentType("application/x-msdownload;charset=utf-8");
  878. }
  879. if (BrowserUtils.isIE(request)) {
  880. // IE
  881. fileName = URLEncoder.encode(fileName, "UTF-8");
  882. } else {
  883. // 非IE
  884. fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
  885. }
  886. response.setHeader("Content-disposition", "attachment; filename="+fileName);
  887. }else{
  888. int dotIndex = fileName.lastIndexOf('.');
  889. String suffix="";
  890. if(dotIndex!=-1)
  891. suffix = fileName.substring(dotIndex+1);
  892. if(suffix.equalsIgnoreCase("doc") || suffix.equalsIgnoreCase("docx")){
  893. response.setContentType("application/msword");
  894. // response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
  895. }else if(suffix.equalsIgnoreCase("xls") || suffix.equalsIgnoreCase("xlsx")){
  896. response.setContentType("application/vnd.ms-excel");
  897. }else if(suffix.equalsIgnoreCase("pdf")){
  898. response.setContentType("application/pdf");
  899. }else {
  900. response.setContentType("image/jpeg;charset=utf-8");
  901. }
  902. }
  903. String key = "";
  904. if(!"".equals(dbpath)){
  905. key = dbpath;
  906. }
  907. InputStream inputStream = null;
  908. OutputStream outputStream = null;
  909. try {
  910. // 创建OSSClient实例
  911. OSSClient ossClient = new OSSClient(CustomerConstant.ENDPOINT, CustomerConstant.ACCESSKEY_ID, CustomerConstant.ACCESSKEY_SECRET);
  912. OSSObject ossObject = ossClient.getObject(CustomerConstant.BUCKETNAME, key);
  913. inputStream = new BufferedInputStream(ossObject.getObjectContent());
  914. outputStream = response.getOutputStream();
  915. byte[] buf = new byte[1024];
  916. int len;
  917. while ((len = inputStream.read(buf)) > 0) {
  918. outputStream.write(buf, 0, len);
  919. }
  920. // 关闭client
  921. ossClient.shutdown();
  922. response.flushBuffer();
  923. List<TSysFileEntity> tSysFiles = systemService.findByProperty(TSysFileEntity.class, "fileUrl", dbpath);
  924. if(tSysFiles != null && tSysFiles.size() > 0 && StringUtils.isNotEmpty(tSysFiles.get(0).getUserpass()) && bEncryptpdf) {
  925. sendPassToUser(tSysFiles.get(0).getFileName(),tSysFiles.get(0).getUserpass());
  926. }
  927. } catch (Exception e) {
  928. logger.info("--通过流的方式获取文件异常--" + e.getMessage());
  929. }finally{
  930. if(inputStream != null){
  931. inputStream.close();
  932. }
  933. if(outputStream != null){
  934. outputStream.close();
  935. }
  936. }
  937. }
  938. /**
  939. * 获取图片流/获取文件用于下载
  940. * @param response
  941. * @param request
  942. * @throws Exception
  943. */
  944. @RequestMapping(value="showOrDownByurl", method = RequestMethod.GET)
  945. public void getImgByurl(HttpServletResponse response, HttpServletRequest request) throws Exception{
  946. String flag=request.getParameter("down");//是否下载否则展示图片
  947. String dbpath = request.getParameter("dbPath");
  948. if("1".equals(flag)){
  949. response.setContentType("application/x-msdownload;charset=utf-8");
  950. String fileName=tSysFileService.getFileNameByurlPath(dbpath);
  951. if (BrowserUtils.isIE(request)) {
  952. // IE
  953. fileName = URLEncoder.encode(fileName, "UTF-8");
  954. } else {
  955. // 非IE
  956. fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
  957. }
  958. response.setHeader("Content-disposition", "attachment; filename="+fileName);
  959. }else{
  960. response.setContentType("image/jpeg;charset=utf-8");
  961. }
  962. InputStream inputStream = null;
  963. OutputStream outputStream=null;
  964. try {
  965. String localPath=ResourceUtil.getConfigByName("webUploadpath");
  966. String imgurl = localPath + File.separator + dbpath;
  967. inputStream = new BufferedInputStream(new FileInputStream(imgurl));
  968. outputStream = response.getOutputStream();
  969. byte[] buf = new byte[1024];
  970. int len;
  971. while ((len = inputStream.read(buf)) > 0) {
  972. outputStream.write(buf, 0, len);
  973. }
  974. response.flushBuffer();
  975. } catch (Exception e) {
  976. logger.info("--通过流的方式获取文件异常--"+e.getMessage());
  977. }finally{
  978. if(inputStream!=null){
  979. inputStream.close();
  980. }
  981. if(outputStream!=null){
  982. outputStream.close();
  983. }
  984. }
  985. }
  986. /**
  987. * 导入功能跳转
  988. *
  989. * @return
  990. */
  991. @RequestMapping(params = "upload")
  992. public ModelAndView upload(HttpServletRequest req) {
  993. req.setAttribute("controller_name","tSysFileController");
  994. return new ModelAndView("common/upload/pub_excel_upload");
  995. }
  996. /**
  997. * 导出excel
  998. *
  999. * @param request
  1000. * @param response
  1001. */
  1002. @RequestMapping(params = "exportXls")
  1003. public String exportXls(TSysFileEntity tSysFile,HttpServletRequest request,HttpServletResponse response
  1004. , DataGrid dataGrid,ModelMap modelMap) {
  1005. CriteriaQuery cq = new CriteriaQuery(TSysFileEntity.class, dataGrid);
  1006. org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, tSysFile, request.getParameterMap());
  1007. List<TSysFileEntity> tSysFiles = this.tSysFileService.getListByCriteriaQuery(cq,false);
  1008. modelMap.put(NormalExcelConstants.FILE_NAME,"文件管理表");
  1009. modelMap.put(NormalExcelConstants.CLASS,TSysFileEntity.class);
  1010. modelMap.put(NormalExcelConstants.PARAMS,new ExportParams("文件管理表列表", "导出人:"+ResourceUtil.getSessionUser().getRealName(),
  1011. "导出信息"));
  1012. modelMap.put(NormalExcelConstants.DATA_LIST,tSysFiles);
  1013. return NormalExcelConstants.JEECG_EXCEL_VIEW;
  1014. }
  1015. /**
  1016. * 导出excel 使模板
  1017. *
  1018. * @param request
  1019. * @param response
  1020. */
  1021. @RequestMapping(params = "exportXlsByT")
  1022. public String exportXlsByT(TSysFileEntity tSysFile,HttpServletRequest request,HttpServletResponse response
  1023. , DataGrid dataGrid,ModelMap modelMap) {
  1024. modelMap.put(NormalExcelConstants.FILE_NAME,"文件管理表");
  1025. modelMap.put(NormalExcelConstants.CLASS,TSysFileEntity.class);
  1026. modelMap.put(NormalExcelConstants.PARAMS,new ExportParams("文件管理表列表", "导出人:"+ResourceUtil.getSessionUser().getRealName(),
  1027. "导出信息"));
  1028. modelMap.put(NormalExcelConstants.DATA_LIST,new ArrayList());
  1029. return NormalExcelConstants.JEECG_EXCEL_VIEW;
  1030. }
  1031. @SuppressWarnings("unchecked")
  1032. @RequestMapping(params = "importExcel", method = RequestMethod.POST)
  1033. @ResponseBody
  1034. public AjaxJson importExcel(HttpServletRequest request, HttpServletResponse response) {
  1035. AjaxJson j = new AjaxJson();
  1036. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
  1037. Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
  1038. for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
  1039. MultipartFile file = entity.getValue();// 获取上传文件对象
  1040. ImportParams params = new ImportParams();
  1041. params.setTitleRows(2);
  1042. params.setHeadRows(1);
  1043. params.setNeedSave(true);
  1044. try {
  1045. List<TSysFileEntity> listTSysFileEntitys = ExcelImportUtil.importExcel(file.getInputStream(),TSysFileEntity.class,params);
  1046. for (TSysFileEntity tSysFile : listTSysFileEntitys) {
  1047. tSysFileService.save(tSysFile);
  1048. }
  1049. j.setMsg("文件导入成功!");
  1050. } catch (Exception e) {
  1051. j.setMsg("文件导入失败!");
  1052. logger.error(ExceptionUtil.getExceptionMessage(e));
  1053. }finally{
  1054. try {
  1055. file.getInputStream().close();
  1056. } catch (IOException e) {
  1057. e.printStackTrace();
  1058. }
  1059. }
  1060. }
  1061. return j;
  1062. }
  1063. @RequestMapping(method = RequestMethod.GET)
  1064. @ResponseBody
  1065. public List<TSysFileEntity> list() {
  1066. List<TSysFileEntity> listTSysFiles=tSysFileService.getList(TSysFileEntity.class);
  1067. return listTSysFiles;
  1068. }
  1069. @RequestMapping(value = "/{id}", method = RequestMethod.GET)
  1070. @ResponseBody
  1071. public ResponseEntity<?> get(@PathVariable("id") String id) {
  1072. TSysFileEntity task = tSysFileService.get(TSysFileEntity.class, id);
  1073. if (task == null) {
  1074. return new ResponseEntity(HttpStatus.NOT_FOUND);
  1075. }
  1076. return new ResponseEntity(task, HttpStatus.OK);
  1077. }
  1078. /**
  1079. * 删除文件管理表
  1080. *
  1081. * @return
  1082. */
  1083. @RequestMapping(params = "getPWD")
  1084. @ResponseBody
  1085. public AjaxJson getPWD(TSysFileEntity tSysFile, HttpServletRequest request) {
  1086. String message = "密码成功发放,请查收";
  1087. AjaxJson j = new AjaxJson();
  1088. tSysFile = systemService.getEntity(TSysFileEntity.class, tSysFile.getId());
  1089. try{
  1090. sendPassToUser(tSysFile.getFileName(),tSysFile.getUserpass());
  1091. }catch(Exception e){
  1092. e.printStackTrace();
  1093. message = "获取密码失败,请联系管理员";
  1094. throw new BusinessException(e.getMessage());
  1095. }
  1096. j.setMsg(message);
  1097. return j;
  1098. }
  1099. private void sendPassToUser(String filename, String pass) {
  1100. //处理超长文件名,阿里短信平台要求参数不允许超过20个字符
  1101. if(filename.length()>20) {
  1102. filename = filename.substring(0, 14)+"...pdf";
  1103. }
  1104. TSUser user = ResourceUtil.getSessionUser();
  1105. String mobile ;
  1106. if(ResourceUtil.getConfigByName(Globals.SERVER_TYPE).equals(Globals.SERVER_TYPE_LINE)) {
  1107. mobile = user.getMobilePhone();
  1108. }else {
  1109. mobile = ResourceUtil.getConfigByName(Globals.SERVER_TEST_MOBILE);
  1110. }
  1111. SendSmsResponse sendSmsResponse;
  1112. try {
  1113. // 设置超时时间-可自行调整
  1114. System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
  1115. System.setProperty("sun.net.client.defaultReadTimeout", "10000");
  1116. // 初始化ascClient需要的几个参数
  1117. final String product = "Dysmsapi";// 短信API产品名称(短信产品名固定,无需修改)
  1118. final String domain = "dysmsapi.aliyuncs.com";// 短信API产品域名(接口地址固定,无需修改)
  1119. // 替换成你的AK
  1120. final String accessKeyId = "LTAImsMOGNQTqWvX";// 你的accessKeyId,参考本文档步骤2
  1121. final String accessKeySecret = "zdf5cux8RzTl531tQQ1rIlESTBBiBe";// 你的accessKeySecret,参考本文档步骤2
  1122. // 初始化ascClient,暂时不支持多region(请勿修改)
  1123. IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
  1124. DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
  1125. IAcsClient acsClient = new DefaultAcsClient(profile);
  1126. // 组装请求对象
  1127. SendSmsRequest request = new SendSmsRequest();
  1128. // 使用post提交
  1129. request.setMethod(MethodType.POST);
  1130. // 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为00+国际区号+号码,如“0085200000000”
  1131. request.setPhoneNumbers(mobile);
  1132. // 必填:短信签名-可在短信控制台中找到
  1133. request.setSignName("美都环卫物业");
  1134. // 必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版
  1135. request.setTemplateCode("SMS_165677189");
  1136. // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
  1137. // 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
  1138. request.setTemplateParam("{\"filename\":\"" + filename + "\",\"pwd\":\"" + pass + "\"}");
  1139. // 可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
  1140. // request.setSmsUpExtendCode("90997");
  1141. // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
  1142. // request.setOutId("yourOutId");
  1143. // 请求失败这里会抛ClientException异常
  1144. sendSmsResponse = acsClient.getAcsResponse(request);
  1145. systemService.addLog("密码成功发放,请查收,手机号:"+mobile, Globals.Log_Leavel_INFO,Globals.Log_Type_OTHER);
  1146. } catch (Exception e) {
  1147. logger.error(e);
  1148. }
  1149. }
  1150. @ResponseBody
  1151. @RequestMapping(params = "ossFileDownload")
  1152. public String ossFileDownload(HttpServletRequest request){
  1153. String key = request.getParameter("key");
  1154. // 创建OSSClient实例
  1155. OSSClient ossClient = new OSSClient(CustomerConstant.ENDPOINT, CustomerConstant.ACCESSKEY_ID, CustomerConstant.ACCESSKEY_SECRET);
  1156. Calendar c = Calendar.getInstance();
  1157. c.add(Calendar.MINUTE, 2);
  1158. String fileUrl = ossClient.generatePresignedUrl(CustomerConstant.BUCKETNAME, key, c.getTime()).toString();
  1159. // 关闭client
  1160. ossClient.shutdown();
  1161. return fileUrl;
  1162. }
  1163. }