package cn.com.lzt.common.controller; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; import java.net.URLEncoder; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.jeecgframework.core.common.controller.BaseController; import org.jeecgframework.core.common.exception.BusinessException; import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery; import org.jeecgframework.core.common.model.json.AjaxJson; import org.jeecgframework.core.common.model.json.DataGrid; import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.util.BrowserType; import org.jeecgframework.core.util.BrowserUtils; import org.jeecgframework.core.util.ExceptionUtil; import org.jeecgframework.core.util.FileUtils; import org.jeecgframework.core.util.ListUtils; import org.jeecgframework.core.util.MutiLangUtil; import org.jeecgframework.core.util.ResourceUtil; import org.jeecgframework.core.util.StringUtil; import org.jeecgframework.core.util.oConvertUtils; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; import org.jeecgframework.tag.core.easyui.TagUtil; import org.jeecgframework.web.system.pojo.base.TSUser; import org.jeecgframework.web.system.service.SystemService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.util.FileCopyUtils; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import cn.com.lzt.common.entity.TSysFileEntity; import cn.com.lzt.common.entity.WebUploadEntity; import cn.com.lzt.common.service.TSysFileServiceI; import cn.com.lzt.common.util.CustomerConstant; import com.alibaba.fastjson.JSONObject; import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.OSSObject; import com.aliyun.oss.model.ObjectMetadata; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.http.MethodType; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import com.itextpdf.text.Document; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfImportedPage; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfWriter; /** * @Title: Controller * @Description: 文件管理表 * @author onlineGenerator * @date 2017-07-29 15:00:16 * @version V1.0 * */ @Controller @RequestMapping("/tSysFileController") public class TSysFileController extends BaseController { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(TSysFileController.class); @Autowired private TSysFileServiceI tSysFileService; @Autowired private SystemService systemService; // 下载路径 private static final String showAndDownUrl = ResourceUtil.getConfigByName("showAndDownUrl"); /** * 文件管理表列表 页面跳转 * * @return */ @RequestMapping(params = "list") public ModelAndView list(HttpServletRequest request, HttpServletRequest req,WebUploadEntity webUpload) { if (null == webUpload) { webUpload = new WebUploadEntity(); } String curUserName = ResourceUtil.getSessionUser().getUserName(); req.setAttribute("curUserName", curUserName); req.setAttribute("webUpload", webUpload); req.setAttribute("showAndDownUrl", showAndDownUrl); return new ModelAndView("cn/com/lzt/common/tSysFileList"); } /** * easyui AJAX请求数据 * * @param request * @param response * @param dataGrid */ @RequestMapping(params = "datagrid") public void datagrid(TSysFileEntity tSysFile,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) { CriteriaQuery cq = new CriteriaQuery(TSysFileEntity.class, dataGrid); //查询条件组装器 org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, tSysFile, request.getParameterMap()); try{ //自定义追加查询条件 }catch (Exception e) { throw new BusinessException(e.getMessage()); } cq.add(); this.tSysFileService.getDataGridReturn(cq, true); // 设置是否预览Flg List list = new ArrayList<>(); for(int i = 0; i < dataGrid.getResults().size(); i++) { TSysFileEntity dbEntity = (TSysFileEntity) dataGrid.getResults().get(i); TSysFileEntity tSysFileEntity = new TSysFileEntity(); try { BeanUtils.copyProperties(tSysFileEntity,dbEntity); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } String fileName = tSysFileEntity.getFileName(); String fileType = fileName.substring(fileName.lastIndexOf(".") + 1); if("jpg".equals(fileType) || "jpeg".equals(fileType) ||"png".equals(fileType) || "pdf".equals(fileType)) { tSysFileEntity.setIsPreviewFlg("1"); boolean aliyunflg = showAndDownUrl.indexOf("aliyun")!=-1; String dbpath=null; if("0".equals(aliyunflg)) { dbpath = "showOrDownByurl.do?dbPath=" + tSysFileEntity.getFileUrl(); } else { dbpath = request.getContextPath()+"/tSysFileController/aliyunshowOrDownByurl.do?dbPath=" + tSysFileEntity.getFileUrl(); } tSysFileEntity.setPreviewUrl(dbpath); } else { tSysFileEntity.setIsPreviewFlg("0"); } String userName = tSysFileEntity.getCreateBy(); String realName = ""; // 查询主组织 StringBuilder getRealNameByUserNameSql = new StringBuilder(); getRealNameByUserNameSql.append(" SELECT "); getRealNameByUserNameSql.append(" realname "); getRealNameByUserNameSql.append(" FROM t_s_base_user "); getRealNameByUserNameSql.append(" WHERE "); getRealNameByUserNameSql.append(" username = '" + userName + "'"); List> realNameMapList = systemService.findForJdbc(getRealNameByUserNameSql.toString()); if(realNameMapList.size() > 0) { realName = (String)realNameMapList.get(0).get("realname"); } tSysFileEntity.setCreateBy(realName); list.add(tSysFileEntity); } dataGrid.setResults(list); TagUtil.datagrid(response, dataGrid); } /** * 删除文件管理表 * * @return */ @RequestMapping(params = "doDel") @ResponseBody public AjaxJson doDel(TSysFileEntity tSysFile, HttpServletRequest request) { String message = MutiLangUtil.getMutiLangInstance().getLang("文件删除成功"); AjaxJson j = new AjaxJson(); tSysFile = systemService.getEntity(TSysFileEntity.class, tSysFile.getId()); try{ String path = tSysFile.getFileUrl(); // deletefile(path, j); deletefile(path, tSysFile.getBusiId(), j); //systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO); }catch(Exception e){ e.printStackTrace(); message = MutiLangUtil.getMutiLangInstance().getLang("文件删除失败"); throw new BusinessException(e.getMessage()); } j.setMsg(message); return j; } /** * 添加文件管理表 * * @return */ @RequestMapping(params = "doAdd") @ResponseBody public AjaxJson doAdd(TSysFileEntity tSysFile, HttpServletRequest request) { String message = null; AjaxJson j = new AjaxJson(); message = "文件添加成功"; try{ tSysFileService.save(tSysFile); systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO); }catch(Exception e){ e.printStackTrace(); message = "文件添加失败"; throw new BusinessException(e.getMessage()); } j.setMsg(message); return j; } /** * 跳转至图片预览页面 * @param fileUrl 文件的访问路径 * @param req * @return */ @RequestMapping(value="showViewFile",method = RequestMethod.GET) public ModelAndView showViewFile(String fileUrl, String aliyunflg, HttpServletRequest req) { if (FileUtils.isPicture(FileUtils.getExtend(fileUrl))) { return this.showPictureview(fileUrl, aliyunflg, req); }else{ return this.showPdfView(fileUrl, aliyunflg, req); } } /** * 跳转至图片预览页面 * @param fileUrl 文件的访问路径 * @param req * @return */ @RequestMapping(params = "showPictureview") public ModelAndView showPictureview(String fileUrl, String aliyunflg, HttpServletRequest req) { if (FileUtils.isPicture(FileUtils.getExtend(fileUrl))) { List tSysFiles = systemService.findByProperty(TSysFileEntity.class, "fileUrl", fileUrl); if (ListUtils.isNullOrEmpty(tSysFiles)) { req.setAttribute("errormsg",MutiLangUtil.getMutiLangInstance().getLang("文件不存在")); return new ModelAndView("cn/com/lzt/pdf/web/pdfviewiframe"); }else{ String dbpath = ""; if("0".equals(aliyunflg)) { dbpath = "showOrDownByurl.do?dbPath=" + fileUrl; } else { dbpath = "aliyunshowOrDownByurl.do?dbPath=" + fileUrl; } req.setAttribute("dbpath",dbpath); } return new ModelAndView("cn/com/lzt/pdf/web/pictureview"); }else{ req.setAttribute("errormsg",MutiLangUtil.getMutiLangInstance().getLang("文件类型错误")); return new ModelAndView("cn/com/lzt/pdf/web/pdfviewiframe"); } } /** * 跳转至pdf 预览页面 * @param fileUrl 文件的访问路径 * @param req * @return */ @RequestMapping(params = "showpdfview") public ModelAndView showPdfView(String fileUrl, String aliyunflg, HttpServletRequest req) { String encryptpdf = req.getParameter("encryptpdf"); boolean bEncryptpdf = StringUtils.isNotEmpty(encryptpdf) && encryptpdf.equals("1") && fileUrl.indexOf("pdf") > -1; if (oConvertUtils.isNotEmpty(fileUrl)&&fileUrl.toLowerCase().endsWith("pdf")) { List tSysFiles = systemService.findByProperty(TSysFileEntity.class, "fileUrl", fileUrl); if (ListUtils.isNullOrEmpty(tSysFiles)) { req.setAttribute("errormsg",MutiLangUtil.getMutiLangInstance().getLang("文件不存在")); return new ModelAndView("cn/com/lzt/pdf/web/pdfviewiframe"); } String dbpath = ""; if("0".equals(aliyunflg)) { dbpath = "showOrDownByurl.do?down=1&dbPath=" + fileUrl; } else { dbpath = "aliyunshowOrDownByurl.do?down=1&dbPath=" + fileUrl; if(StringUtils.isNotEmpty(tSysFiles.get(0).getUserpass()) && bEncryptpdf){ sendPassToUser(tSysFiles.get(0).getFileName(),tSysFiles.get(0).getUserpass()); } } req.setAttribute("dbpath",dbpath); return new ModelAndView("cn/com/lzt/pdf/web/pdfview"); }else{ req.setAttribute("errormsg",MutiLangUtil.getMutiLangInstance().getLang("文件类型错误")); return new ModelAndView("cn/com/lzt/pdf/web/pdfviewiframe"); } // return new ModelAndView("cn/com/lzt/pdfiframe/web/pdfviewiframe"); } /** * 阿里云oss存储 * @author yulong.zhao * @date 2017年12月28日下午5:04:36 * * @param request * @param response * @return */ @RequestMapping("/aliyunfiledeal") @ResponseBody public AjaxJson aliyunfiledeal(HttpServletRequest request, HttpServletResponse response) { AjaxJson j = new AjaxJson(); String msg = ""; String key = ""; String upFlag = oConvertUtils.getString(request.getParameter("isup")); String delFlag = oConvertUtils.getString(request.getParameter("isdel")); String busiId = oConvertUtils.getString(request.getParameter("busiId")); String encryptpdf = oConvertUtils.getString(request.getParameter("encryptpdf")); String singlemode = oConvertUtils.getString(request.getParameter("singlemode")).toLowerCase(); try { //如果是上传操作 if("1".equals(upFlag)){ long start = System.currentTimeMillis(); System.out.println("oss-start:"+start); String fileName = null; String bizType = request.getParameter("bizType");//上传业务名称 if ("true".equals(singlemode)) { tSysFileService.deleteByBusiId(busiId, bizType); } MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; MultipartFile mf = multipartRequest.getFile("file");// 获取上传文件对象 boolean bEncryptpdf = StringUtils.isNotEmpty(encryptpdf) && encryptpdf.equals("1") && mf.getContentType().indexOf("pdf") > -1; //zbw去除文件名中空格 fileName = removeInternalBlank(mf.getOriginalFilename());// 获取文件名 String extName = FileUtils.getExtend(fileName); String uuid = UUID.randomUUID().toString(); // 创建上传Object的Metadata ObjectMetadata meta = new ObjectMetadata(); // 设置contenttype否则上传图片在oss上预览时不显示图片 meta.setContentType(mf.getContentType()); key = String.format(bizType+"/%s", uuid+"."+extName); OSSClient ossClient = new OSSClient(CustomerConstant.ENDPOINT, CustomerConstant.ACCESSKEY_ID, CustomerConstant.ACCESSKEY_SECRET); String user_pass=null; String owner_pass = null; byte[] mfEncryptedByte = null; // 必须设置ContentLength meta.setContentLength(mf.getBytes().length); //加密处理 if(bEncryptpdf) { user_pass = generateWord(); owner_pass = user_pass; System.out.print(owner_pass+user_pass); mfEncryptedByte = EncryptPDF(request,mf, user_pass, owner_pass); // 必须设置ContentLength meta.setContentLength(mfEncryptedByte.length); } ossClient.putObject(CustomerConstant.BUCKETNAME, key, new ByteArrayInputStream(mfEncryptedByte == null || mfEncryptedByte.length == 0 ? mf.getBytes():mfEncryptedByte),meta); // 关闭client ossClient.shutdown(); msg = MutiLangUtil.getMutiLangInstance().getLang("common.upload.success"); j.setMsg(msg); long end = System.currentTimeMillis(); System.out.println("oss-end:"+end); System.out.println("cost: "+(end-start)/1000); System.out.println("oss-start:"+System.currentTimeMillis()); String dbpath = bizType + "/" + uuid + "." + extName; String busiTable = request.getParameter("busiTable"); String remark = request.getParameter("remark"); TSysFileEntity tSysFileEntity = new TSysFileEntity(); tSysFileEntity.setBusiId(busiId);//业务id tSysFileEntity.setFileUrl(dbpath);//文件访问路径 tSysFileEntity.setFileName(fileName);//文件名称 tSysFileEntity.setTagetType(bizType);//文件类型 tSysFileEntity.setBusiTable(oConvertUtils.getString(busiTable)); tSysFileEntity.setRemark(oConvertUtils.getString(remark)); tSysFileEntity.setUserpass(user_pass); tSysFileEntity.setOwnerpass(owner_pass); tSysFileService.save(tSysFileEntity); j.setObj(tSysFileEntity.getId()); //1、将文件路径赋值给obj,前台可获取之,随表单提交,然后数据库中存储该路径 //2、demo这里用的是AjaxJson对象,开发者可自定义返回对象,但是用t标签的时候路径属性名需为 obj或 filePath 或自己在标签内指定若在标签内指定则action返回路径的名称应保持一致 //如果是删除操作 }else if("1".equals(delFlag)){ String path = oConvertUtils.getString(request.getParameter("path")); if(path.length()>32){//编辑时传入参数是path,新建传入fileid deletefile(path, busiId, j); }else{ TSysFileEntity file = tSysFileService.getEntity(TSysFileEntity.class, path); if(file != null && !"".equals(oConvertUtils.getString(file.getFileUrl()))){ deletefile(file.getFileUrl(), busiId, j); } } }else{ throw new BusinessException("没有传参指定上传还是删除操作!"); } } catch (IOException e) { j.setSuccess(false); logger.info(e.getMessage()); }catch (BusinessException b) { j.setSuccess(false); logger.info(b.getMessage()); } catch (Exception e) { j.setSuccess(false); logger.info(e.getMessage()); } Map attributes = new HashMap(); attributes.put("key", key); j.setAttributes(attributes); j.setMsg(msg); return j; } /* * PDF加密 * */ private byte[] EncryptPDF(HttpServletRequest request,MultipartFile PDFFile,String USER_PASS,String OWNER_PASS) { String realpath = request.getSession().getServletContext().getRealPath("").replaceAll("\\\\", "/")+"/upload/"; String uuid = com.xcgl.utils.UUID.randomUUID().toString(); Document document = new Document(); FileOutputStream outputStream = null; String tempFile = realpath+uuid+".pdf"; byte[] encryptedPDF= null; try { outputStream = new FileOutputStream(tempFile); // Create Readers for the pdfs. PdfReader pdfReader = new PdfReader(PDFFile.getBytes()); // Create a writer for the outputstream PdfWriter writer = PdfWriter.getInstance(document, outputStream); writer.setEncryption(USER_PASS.getBytes(), OWNER_PASS.getBytes(), PdfWriter.ALLOW_SCREENREADERS,PdfWriter.STANDARD_ENCRYPTION_128); document.open(); PdfContentByte cb = writer.getDirectContent(); // Holds the PDF PdfImportedPage page; int pageOfCurrentReaderPDF = 0; // Create a new page in the target for each source page. while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) { document.newPage(); pageOfCurrentReaderPDF++; page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF); cb.addTemplate(page, 0, 0); } outputStream.flush(); document.close(); outputStream.close(); } catch (Exception e) { e.printStackTrace(); } finally { if (document.isOpen()) document.close(); try { if (outputStream != null) outputStream.close(); } catch (IOException ioe) { ioe.printStackTrace(); } } FileInputStream is = null; try { is = new FileInputStream(tempFile); encryptedPDF = new byte[is.available()]; is.read(encryptedPDF); is.close(); File tempPDF = new File(tempFile); tempPDF.delete(); } catch (Exception e) { e.printStackTrace(); }finally { try { if (is != null) is.close(); } catch (IOException ioe) { ioe.printStackTrace(); } } return encryptedPDF; } /* * 生成4位的随机密码 * */ private String generateWord() { String[] beforeShuffle = new String[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "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" }; List list = Arrays.asList(beforeShuffle); Collections.shuffle(list); StringBuilder sb = new StringBuilder(); for (int i = 0; i < list.size(); i++) { sb.append(list.get(i)); } String afterShuffle = sb.toString(); String result = afterShuffle.substring(5, 9); return result; } /** * 去除字符串内部空格 */ public static String removeInternalBlank(String s) { // System.out.println("bb:" + s); Pattern p = Pattern.compile("\\s*|\t|\r|\n"); Matcher m = p.matcher(s); String after = m.replaceAll(""); return after; } /** * 员工基本档案管理批量上传 * @author zbw * 2018-1-15 * @return */ /*@RequestMapping("/aliyunfiledealBatch") @ResponseBody public AjaxJson aliyunfiledealBatch(HttpServletRequest request, HttpServletResponse response) { AjaxJson j = new AjaxJson(); String msg = ""; String upFlag = oConvertUtils.getString(request.getParameter("isup")); String delFlag = oConvertUtils.getString(request.getParameter("isdel")); String busiId = oConvertUtils.getString(request.getParameter("busiId")); String singlemode = oConvertUtils.getString(request.getParameter("singlemode")).toLowerCase(); try { //如果是上传操作 if("1".equals(upFlag)){ String fileName = null; String bizType = request.getParameter("bizType");//上传业务名称 // 张兵伟员工基本档案管理批量上传,重复则删除start if(busiId != null && Globals.busi_id_batch.equals(busiId)){// 批量上传 Map> tSysFileEntityMap=this.getSysFileData(bizType); if(tSysFileEntityMap!=null&&tSysFileEntityMap.get(bizType) != null){ if(tSysFileEntityMap.get(bizType).get(fileName) != null && tSysFileEntityMap.get(bizType).get(fileName).length() != 0){ // deletefile(tSysFileEntityMap.get(bizType).get(fileName), j); deletefile(tSysFileEntityMap.get(bizType).get(fileName), busiId, j); } } } // 张兵伟员工基本档案管理批量上传,重复则删除start if ("true".equals(singlemode)) { tSysFileService.deleteByBusiId(busiId, bizType); } MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; MultipartFile mf = multipartRequest.getFile("file");// 获取上传文件对象 fileName = mf.getOriginalFilename();// 获取文件名 String extName = FileUtils.getExtend(fileName); String uuid = UUID.randomUUID().toString(); // 创建上传Object的Metadata ObjectMetadata meta = new ObjectMetadata(); // 设置contenttype否则上传图片在oss上预览时不显示图片 meta.setContentType(mf.getContentType()); // 必须设置ContentLength meta.setContentLength(mf.getBytes().length); // 创建OSSClient实例 OSSClient ossClient = new OSSClient(CustomerConstant.ENDPOINT, CustomerConstant.ACCESSKEY_ID, CustomerConstant.ACCESSKEY_SECRET); String key = String.format(bizType+"/%s", uuid+"."+extName); ossClient.putObject(CustomerConstant.BUCKETNAME, key, new ByteArrayInputStream(mf.getBytes()),meta); // 关闭client ossClient.shutdown(); msg = MutiLangUtil.getMutiLangInstance().getLang("common.upload.success"); j.setMsg(msg); String dbpath = bizType + "/" + uuid + "." + extName; String busiTable = request.getParameter("busiTable"); String remark = request.getParameter("remark"); TSysFileEntity tSysFileEntity = new TSysFileEntity(); tSysFileEntity.setBusiId(busiId);//业务id tSysFileEntity.setFileUrl(dbpath);//文件访问路径 tSysFileEntity.setFileName(fileName);//文件名称 tSysFileEntity.setTagetType(bizType);//文件类型 tSysFileEntity.setBusiTable(oConvertUtils.getString(busiTable)); tSysFileEntity.setRemark(oConvertUtils.getString(remark)); tSysFileService.save(tSysFileEntity); j.setObj(tSysFileEntity.getId()); //1、将文件路径赋值给obj,前台可获取之,随表单提交,然后数据库中存储该路径 //2、demo这里用的是AjaxJson对象,开发者可自定义返回对象,但是用t标签的时候路径属性名需为 obj或 filePath 或自己在标签内指定若在标签内指定则action返回路径的名称应保持一致 //如果是删除操作 }else if("1".equals(delFlag)){ String path = oConvertUtils.getString(request.getParameter("path")); if(path.length()>32){//编辑时传入参数是path,新建传入fileid deletefile(path, busiId, j); }else{ TSysFileEntity file = tSysFileService.getEntity(TSysFileEntity.class, path); if(file != null && !"".equals(oConvertUtils.getString(file.getFileUrl()))){ deletefile(file.getFileUrl(), busiId, j); } } }else{ throw new BusinessException("没有传参指定上传还是删除操作!"); } } catch (IOException e) { j.setSuccess(false); logger.info(e.getMessage()); }catch (BusinessException b) { j.setSuccess(false); logger.info(b.getMessage()); } catch (Exception e) { j.setSuccess(false); logger.info(e.getMessage()); } j.setMsg(msg); return j; }*/ public Map> getSysFileData(String tagetType) { Map> tSysFileEntityMap = null; StringBuffer hql = new StringBuffer(" from TSysFileEntity where busiId=? and tagetType=? "); List tSysFileEntityList = systemService.findHql(hql.toString(),Globals.busi_id_batch,tagetType); //获取所有文件名称 结构 Map> tSysFileEntityMap = new HashMap>(); for (int i = 0; i < tSysFileEntityList.size(); i++) { Map tempMap = new HashMap(); tempMap.put(tSysFileEntityList.get(i).getFileName(),tSysFileEntityList.get(i).getFileUrl()); if(tSysFileEntityMap.size()==0){ tSysFileEntityMap.put(tSysFileEntityList.get(i).getTagetType(), tempMap); }else{ if(!tSysFileEntityMap.containsKey(tSysFileEntityList.get(i).getTagetType())){ tSysFileEntityMap.put(tSysFileEntityList.get(i).getTagetType(), tempMap); }else{ tSysFileEntityMap.get(tSysFileEntityList.get(i).getTagetType()).putAll(tempMap); } } } return tSysFileEntityMap; } /** * WebUploader * 文件上传处理/删除处理 */ @RequestMapping("/filedeal") @ResponseBody public AjaxJson filedeal(HttpServletRequest request, HttpServletResponse response) { AjaxJson j = new AjaxJson(); String msg = ""; String upFlag = oConvertUtils.getString(request.getParameter("isup")); String delFlag = oConvertUtils.getString(request.getParameter("isdel")); String busiId = oConvertUtils.getString(request.getParameter("busiId")); String singlemode = oConvertUtils.getString(request.getParameter("singlemode")).toLowerCase(); //String ctxPath = request.getSession().getServletContext().getRealPath(""); String ctxPath = ResourceUtil.getConfigByName("webUploadpath"); /*Map> tSysFileEntityMap = null; if(busiId != null && Globals.busi_id_batch.equals(busiId)){// 批量上传 // 张兵伟添加的删除方法start StringBuffer hql = new StringBuffer(" from TSysFileEntity where busiId=? "); List tSysFileEntityList = systemService.findHql(hql.toString(),Globals.busi_id_batch); //获取所有文件名称 结构 Map> tSysFileEntityMap = new HashMap>(); for (int i = 0; i < tSysFileEntityList.size(); i++) { Map tempMap = new HashMap(); tempMap.put(tSysFileEntityList.get(i).getFileName(),tSysFileEntityList.get(i).getFileUrl()); if(tSysFileEntityMap.size()==0){ tSysFileEntityMap.put(tSysFileEntityList.get(i).getTagetType(), tempMap); }else{ if(!tSysFileEntityMap.containsKey(tSysFileEntityList.get(i).getTagetType())){ tSysFileEntityMap.put(tSysFileEntityList.get(i).getTagetType(), tempMap); }else{ tSysFileEntityMap.get(tSysFileEntityList.get(i).getTagetType()).putAll(tempMap); } } } // 张兵伟添加的删除方法end }*/ try { //如果是上传操作 if("1".equals(upFlag)){ String fileName = null; String bizType = request.getParameter("bizType");//上传业务名称 File file = new File(ctxPath+File.separator+bizType); if (!file.exists()) { file.mkdirs();// 创建文件根目录 } if ("true".equals(singlemode)) { tSysFileService.deleteByBusiId(busiId, bizType); } MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; MultipartFile mf = multipartRequest.getFile("file");// 获取上传文件对象 fileName = mf.getOriginalFilename();// 获取文件名 // 张兵伟员工基本档案管理批量上传,重复则删除start if(busiId != null && Globals.busi_id_batch.equals(busiId)){// 批量上传 Map> tSysFileEntityMap=this.getSysFileData(bizType); if(tSysFileEntityMap!=null&&tSysFileEntityMap.get(bizType) != null){ if(tSysFileEntityMap.get(bizType).get(fileName) != null && tSysFileEntityMap.get(bizType).get(fileName).length() != 0){ // deletefile(tSysFileEntityMap.get(bizType).get(fileName), j); deletefile(tSysFileEntityMap.get(bizType).get(fileName), busiId, j); } } } // 张兵伟员工基本档案管理批量上传,重复则删除start String extName = FileUtils.getExtend(fileName); String uuid = UUID.randomUUID().toString(); String savePath = file.getPath() + File.separator + uuid +"." + extName; File savefile = new File(savePath); FileCopyUtils.copy(mf.getBytes(), savefile); msg = MutiLangUtil.getMutiLangInstance().getLang("common.upload.success"); j.setMsg(msg); String dbpath = bizType + "/" + uuid + "." + extName; String busiTable = request.getParameter("busiTable"); String remark = request.getParameter("remark"); TSysFileEntity tSysFileEntity = new TSysFileEntity(); tSysFileEntity.setBusiId(busiId);//业务id tSysFileEntity.setFileUrl(dbpath);//文件访问路径 tSysFileEntity.setFileName(fileName);//文件名称 tSysFileEntity.setTagetType(bizType);//文件类型 tSysFileEntity.setBusiTable(oConvertUtils.getString(busiTable)); tSysFileEntity.setRemark(oConvertUtils.getString(remark)); tSysFileService.save(tSysFileEntity); j.setObj(tSysFileEntity.getId()); //1、将文件路径赋值给obj,前台可获取之,随表单提交,然后数据库中存储该路径 //2、demo这里用的是AjaxJson对象,开发者可自定义返回对象,但是用t标签的时候路径属性名需为 obj或 filePath 或自己在标签内指定若在标签内指定则action返回路径的名称应保持一致 //如果是删除操作 }else if("1".equals(delFlag)){ String path = request.getParameter("path"); if(busiId != null && Globals.busi_id_batch.equals(busiId)){//批量上传 deletefile(path, busiId, j); }else{ if(path.length()>32){//编辑时传入参数是path,新建传入fileid deletefile(path, busiId, j); }else{ TSysFileEntity file = tSysFileService.getEntity(TSysFileEntity.class, path); if(file != null && !"".equals(oConvertUtils.getString(file.getFileUrl()))){ deletefile(file.getFileUrl(), busiId, j); } } } }else{ throw new BusinessException("没有传参指定上传还是删除操作!"); } } catch (IOException e) { j.setSuccess(false); logger.info(e.getMessage()); }catch (BusinessException b) { j.setSuccess(false); logger.info(b.getMessage()); } catch (Exception e) { j.setSuccess(false); logger.info(e.getMessage()); } j.setMsg(msg); return j; } /** * 删除物理地址文件 * @author zhijia.wang * @param path * @param j * @throws Exception */ private void deletefile(String path, String busiId, AjaxJson j) throws Exception { String msg = ""; //不是阿里云上传 if("tSysFileController/filedeal.do".equals(ResourceUtil.getConfigByName("fileDeal"))){ String ctxPath = ResourceUtil.getConfigByName("webUploadpath");// demo中设置为D://upFiles,实际项目应因事制宜 String delpath = ctxPath + File.separator + path; File fileDelete = new File(delpath); tSysFileService.deleteByUrlPath(path, busiId); if (!fileDelete.exists() || !fileDelete.isFile()) { msg = MutiLangUtil.getMutiLangInstance().getLang("file.warn.filelost"); // 不存在前台也给他删除 j.setSuccess(true); j.setMsg(msg); } else { if (fileDelete.delete()) { msg = MutiLangUtil.getMutiLangInstance().getLang("file.delete.success"); j.setMsg(msg); } else { j.setSuccess(false); msg = MutiLangUtil.getMutiLangInstance().getLang("file.delete.fail"); j.setMsg(msg); } } } //阿里云上传 if("tSysFileController/aliyunfiledeal.do".equals(ResourceUtil.getConfigByName("fileDeal"))){ tSysFileService.deleteByUrlPath(path, busiId); if(!"".equals(oConvertUtils.getString(path))){ String key = path; // 创建OSSClient实例 OSSClient ossClient = new OSSClient(CustomerConstant.ENDPOINT, CustomerConstant.ACCESSKEY_ID, CustomerConstant.ACCESSKEY_SECRET); // Object是否存在 boolean found = ossClient.doesObjectExist(CustomerConstant.BUCKETNAME, key); if(found){ ossClient.deleteObject(CustomerConstant.BUCKETNAME, key); ossClient.shutdown(); }else{ msg = MutiLangUtil.getMutiLangInstance().getLang("file.warn.filelost"); // 不存在前台也给他删除 j.setSuccess(true); j.setMsg(msg); } }else{ msg = MutiLangUtil.getMutiLangInstance().getLang("file.warn.filelost"); // 不存在前台也给他删除 j.setSuccess(true); j.setMsg(msg); } } } /** * 删除物理地址文件 * @param path * @param j * @throws Exception */ private void deletefile(String path, AjaxJson j) throws Exception { String msg = ""; String ctxPath = ResourceUtil.getConfigByName("webUploadpath"); String delpath = ctxPath + File.separator + path; File fileDelete = new File(delpath); tSysFileService.deleteByUrlPath(path); if (!fileDelete.exists() || !fileDelete.isFile()) { msg = MutiLangUtil.getMutiLangInstance().getLang("file.warn.filelost"); // 不存在前台也给他删除 j.setSuccess(true); j.setMsg(msg); } else { if (fileDelete.delete()) { msg = MutiLangUtil.getMutiLangInstance().getLang("file.delete.success"); j.setMsg(msg); } else { j.setSuccess(false); msg = MutiLangUtil.getMutiLangInstance().getLang("file.delete.fail"); j.setMsg(msg); } } } /** * 通过业务主键获取当前主键下 此code 下的文件列表 * @param request * @param response * @return */ @RequestMapping("/getFilelistByBusikey") @ResponseBody public AjaxJson getFilelistByBusikey(HttpServletRequest request, HttpServletResponse response){ String bizType=request.getParameter("bizType"); String busiId=request.getParameter("busiId"); AjaxJson j = new AjaxJson(); String msg = ""; if (StringUtil.isNotEmpty(busiId)&&StringUtil.isNotEmpty(bizType)) { try { List entities = tSysFileService.getSysFileEntitiesByBusiId(busiId,bizType); StringBuffer url = new StringBuffer(); StringBuffer filename = new StringBuffer(); url.append(""); filename.append(""); for (int i = 0; i < entities.size(); i++) { url.append(entities.get(i).getFileUrl()); url.append(","); filename.append(entities.get(i).getFileName()); filename.append(","); } HashMap map = new HashMap(); map.put("url", url.toString()); map.put("filename", filename.toString()); map.put("filelist", JSONObject.toJSONString(entities)); j.setObj(map); } catch (Exception e) { e.getStackTrace(); } } return j; } /** * 阿里云文件下载及查看 * @author yulong.zhao * @date 2017年12月28日下午5:58:01 * @param response * @param request * @throws Exception */ @RequestMapping(value="aliyunshowOrDownByurl", method = RequestMethod.GET) public void getAliyunImgByurl(HttpServletResponse response, HttpServletRequest request) throws Exception{ String flag = request.getParameter("down");//是否下载否则展示图片 String dbpath = oConvertUtils.getString(request.getParameter("dbPath")); String fileName = tSysFileService.getFileNameByurlPath(dbpath); String singlemode = oConvertUtils.getString(request.getParameter("singlemode")).toLowerCase(); String encryptpdf = request.getParameter("encryptpdf"); boolean bEncryptpdf = StringUtils.isNotEmpty(encryptpdf) && encryptpdf.equals("1") && fileName.indexOf("pdf") > -1; if("1".equals(flag)){ BrowserType browerType = BrowserUtils.getBrowserType(request); if(browerType!=null && browerType.equals(BrowserType.Safari)) { response.setContentType("application/octet-stream;charset=utf-8"); }else { response.setContentType("application/x-msdownload;charset=utf-8"); } if (BrowserUtils.isIE(request)) { // IE fileName = URLEncoder.encode(fileName, "UTF-8"); } else { // 非IE fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1"); } response.setHeader("Content-disposition", "attachment; filename="+fileName); }else{ int dotIndex = fileName.lastIndexOf('.'); String suffix=""; if(dotIndex!=-1) suffix = fileName.substring(dotIndex+1); if(suffix.equalsIgnoreCase("doc") || suffix.equalsIgnoreCase("docx")){ response.setContentType("application/msword"); // response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); }else if(suffix.equalsIgnoreCase("xls") || suffix.equalsIgnoreCase("xlsx")){ response.setContentType("application/vnd.ms-excel"); }else if(suffix.equalsIgnoreCase("pdf")){ response.setContentType("application/pdf"); }else { response.setContentType("image/jpeg;charset=utf-8"); } } String key = ""; if(!"".equals(dbpath)){ key = dbpath; } InputStream inputStream = null; OutputStream outputStream = null; try { // 创建OSSClient实例 OSSClient ossClient = new OSSClient(CustomerConstant.ENDPOINT, CustomerConstant.ACCESSKEY_ID, CustomerConstant.ACCESSKEY_SECRET); OSSObject ossObject = ossClient.getObject(CustomerConstant.BUCKETNAME, key); inputStream = new BufferedInputStream(ossObject.getObjectContent()); outputStream = response.getOutputStream(); byte[] buf = new byte[1024]; int len; while ((len = inputStream.read(buf)) > 0) { outputStream.write(buf, 0, len); } // 关闭client ossClient.shutdown(); response.flushBuffer(); List tSysFiles = systemService.findByProperty(TSysFileEntity.class, "fileUrl", dbpath); if(tSysFiles != null && tSysFiles.size() > 0 && StringUtils.isNotEmpty(tSysFiles.get(0).getUserpass()) && bEncryptpdf) { sendPassToUser(tSysFiles.get(0).getFileName(),tSysFiles.get(0).getUserpass()); } } catch (Exception e) { logger.info("--通过流的方式获取文件异常--" + e.getMessage()); }finally{ if(inputStream != null){ inputStream.close(); } if(outputStream != null){ outputStream.close(); } } } /** * 获取图片流/获取文件用于下载 * @param response * @param request * @throws Exception */ @RequestMapping(value="showOrDownByurl", method = RequestMethod.GET) public void getImgByurl(HttpServletResponse response, HttpServletRequest request) throws Exception{ String flag=request.getParameter("down");//是否下载否则展示图片 String dbpath = request.getParameter("dbPath"); if("1".equals(flag)){ response.setContentType("application/x-msdownload;charset=utf-8"); String fileName=tSysFileService.getFileNameByurlPath(dbpath); if (BrowserUtils.isIE(request)) { // IE fileName = URLEncoder.encode(fileName, "UTF-8"); } else { // 非IE fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1"); } response.setHeader("Content-disposition", "attachment; filename="+fileName); }else{ response.setContentType("image/jpeg;charset=utf-8"); } InputStream inputStream = null; OutputStream outputStream=null; try { String localPath=ResourceUtil.getConfigByName("webUploadpath"); String imgurl = localPath + File.separator + dbpath; inputStream = new BufferedInputStream(new FileInputStream(imgurl)); outputStream = response.getOutputStream(); byte[] buf = new byte[1024]; int len; while ((len = inputStream.read(buf)) > 0) { outputStream.write(buf, 0, len); } response.flushBuffer(); } catch (Exception e) { logger.info("--通过流的方式获取文件异常--"+e.getMessage()); }finally{ if(inputStream!=null){ inputStream.close(); } if(outputStream!=null){ outputStream.close(); } } } /** * 导入功能跳转 * * @return */ @RequestMapping(params = "upload") public ModelAndView upload(HttpServletRequest req) { req.setAttribute("controller_name","tSysFileController"); return new ModelAndView("common/upload/pub_excel_upload"); } /** * 导出excel * * @param request * @param response */ @RequestMapping(params = "exportXls") public String exportXls(TSysFileEntity tSysFile,HttpServletRequest request,HttpServletResponse response , DataGrid dataGrid,ModelMap modelMap) { CriteriaQuery cq = new CriteriaQuery(TSysFileEntity.class, dataGrid); org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, tSysFile, request.getParameterMap()); List tSysFiles = this.tSysFileService.getListByCriteriaQuery(cq,false); modelMap.put(NormalExcelConstants.FILE_NAME,"文件管理表"); modelMap.put(NormalExcelConstants.CLASS,TSysFileEntity.class); modelMap.put(NormalExcelConstants.PARAMS,new ExportParams("文件管理表列表", "导出人:"+ResourceUtil.getSessionUser().getRealName(), "导出信息")); modelMap.put(NormalExcelConstants.DATA_LIST,tSysFiles); return NormalExcelConstants.JEECG_EXCEL_VIEW; } /** * 导出excel 使模板 * * @param request * @param response */ @RequestMapping(params = "exportXlsByT") public String exportXlsByT(TSysFileEntity tSysFile,HttpServletRequest request,HttpServletResponse response , DataGrid dataGrid,ModelMap modelMap) { modelMap.put(NormalExcelConstants.FILE_NAME,"文件管理表"); modelMap.put(NormalExcelConstants.CLASS,TSysFileEntity.class); modelMap.put(NormalExcelConstants.PARAMS,new ExportParams("文件管理表列表", "导出人:"+ResourceUtil.getSessionUser().getRealName(), "导出信息")); modelMap.put(NormalExcelConstants.DATA_LIST,new ArrayList()); return NormalExcelConstants.JEECG_EXCEL_VIEW; } @SuppressWarnings("unchecked") @RequestMapping(params = "importExcel", method = RequestMethod.POST) @ResponseBody public AjaxJson importExcel(HttpServletRequest request, HttpServletResponse response) { AjaxJson j = new AjaxJson(); MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); for (Map.Entry entity : fileMap.entrySet()) { MultipartFile file = entity.getValue();// 获取上传文件对象 ImportParams params = new ImportParams(); params.setTitleRows(2); params.setHeadRows(1); params.setNeedSave(true); try { List listTSysFileEntitys = ExcelImportUtil.importExcel(file.getInputStream(),TSysFileEntity.class,params); for (TSysFileEntity tSysFile : listTSysFileEntitys) { tSysFileService.save(tSysFile); } j.setMsg("文件导入成功!"); } catch (Exception e) { j.setMsg("文件导入失败!"); logger.error(ExceptionUtil.getExceptionMessage(e)); }finally{ try { file.getInputStream().close(); } catch (IOException e) { e.printStackTrace(); } } } return j; } @RequestMapping(method = RequestMethod.GET) @ResponseBody public List list() { List listTSysFiles=tSysFileService.getList(TSysFileEntity.class); return listTSysFiles; } @RequestMapping(value = "/{id}", method = RequestMethod.GET) @ResponseBody public ResponseEntity get(@PathVariable("id") String id) { TSysFileEntity task = tSysFileService.get(TSysFileEntity.class, id); if (task == null) { return new ResponseEntity(HttpStatus.NOT_FOUND); } return new ResponseEntity(task, HttpStatus.OK); } /** * 删除文件管理表 * * @return */ @RequestMapping(params = "getPWD") @ResponseBody public AjaxJson getPWD(TSysFileEntity tSysFile, HttpServletRequest request) { String message = "密码成功发放,请查收"; AjaxJson j = new AjaxJson(); tSysFile = systemService.getEntity(TSysFileEntity.class, tSysFile.getId()); try{ sendPassToUser(tSysFile.getFileName(),tSysFile.getUserpass()); }catch(Exception e){ e.printStackTrace(); message = "获取密码失败,请联系管理员"; throw new BusinessException(e.getMessage()); } j.setMsg(message); return j; } private void sendPassToUser(String filename, String pass) { //处理超长文件名,阿里短信平台要求参数不允许超过20个字符 if(filename.length()>20) { filename = filename.substring(0, 14)+"...pdf"; } TSUser user = ResourceUtil.getSessionUser(); String mobile ; if(ResourceUtil.getConfigByName(Globals.SERVER_TYPE).equals(Globals.SERVER_TYPE_LINE)) { mobile = user.getMobilePhone(); }else { mobile = ResourceUtil.getConfigByName(Globals.SERVER_TEST_MOBILE); } SendSmsResponse sendSmsResponse; try { // 设置超时时间-可自行调整 System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); System.setProperty("sun.net.client.defaultReadTimeout", "10000"); // 初始化ascClient需要的几个参数 final String product = "Dysmsapi";// 短信API产品名称(短信产品名固定,无需修改) final String domain = "dysmsapi.aliyuncs.com";// 短信API产品域名(接口地址固定,无需修改) // 替换成你的AK final String accessKeyId = "LTAImsMOGNQTqWvX";// 你的accessKeyId,参考本文档步骤2 final String accessKeySecret = "zdf5cux8RzTl531tQQ1rIlESTBBiBe";// 你的accessKeySecret,参考本文档步骤2 // 初始化ascClient,暂时不支持多region(请勿修改) IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); IAcsClient acsClient = new DefaultAcsClient(profile); // 组装请求对象 SendSmsRequest request = new SendSmsRequest(); // 使用post提交 request.setMethod(MethodType.POST); // 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为00+国际区号+号码,如“0085200000000” request.setPhoneNumbers(mobile); // 必填:短信签名-可在短信控制台中找到 request.setSignName("美都环卫物业"); // 必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版 request.setTemplateCode("SMS_165677189"); // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 // 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败 request.setTemplateParam("{\"filename\":\"" + filename + "\",\"pwd\":\"" + pass + "\"}"); // 可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段) // request.setSmsUpExtendCode("90997"); // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者 // request.setOutId("yourOutId"); // 请求失败这里会抛ClientException异常 sendSmsResponse = acsClient.getAcsResponse(request); systemService.addLog("密码成功发放,请查收,手机号:"+mobile, Globals.Log_Leavel_INFO,Globals.Log_Type_OTHER); } catch (Exception e) { logger.error(e); } } @ResponseBody @RequestMapping(params = "ossFileDownload") public String ossFileDownload(HttpServletRequest request){ String key = request.getParameter("key"); // 创建OSSClient实例 OSSClient ossClient = new OSSClient(CustomerConstant.ENDPOINT, CustomerConstant.ACCESSKEY_ID, CustomerConstant.ACCESSKEY_SECRET); Calendar c = Calendar.getInstance(); c.add(Calendar.MINUTE, 2); String fileUrl = ossClient.generatePresignedUrl(CustomerConstant.BUCKETNAME, key, c.getTime()).toString(); // 关闭client ossClient.shutdown(); return fileUrl; } }