文件的上传,下载,预览
来源:互联网 发布:专业的vb振动电机 编辑:程序博客网 时间:2024/05/01 18:23
文件上传需要用到:ajaxfileupload.js
文件预览可以看另外一篇文章
页面:
<a class="orange upload-work-confirm" data-id="upload_file1" data-candidateid="${candidateId!''}" data-jobid="${jobId!''}" href="javascript:void(0);"> <i class="icon-all recom-uploading-icon"></i><label class="modalupl">上传文件<span style="white-space:pre"></span><input type="file" class="upload" id="upload_file1" name="offerUpload"></label></a>
js:
// 文件上传$(".upload-work-confirm").on('change', function() {var candidateId = $(this).attr("data-candidateid");var jobId = $(this).attr("data-jobid");var id = $(this).attr("data-id");$.ajaxFileUpload({url : base + "/gwFile/toGwUpload.htm",data : {candidateId : candidateId},secureuri : false,fileElementId : id,dataType : 'json',success : function(data) {if (data.success == 0) {$.ajax({url : base + "/gwCandidate/saveUploadWork.htm",data : {candidateId : candidateId,jobId : jobId},type : "POST",dataType : "json",success : function(data) {if (data.success == 0) {alert("上传成功");} else {alert("系统异常,请稍后再试");}}});} else if (data.success == 2) {globalLogin(data.msg);return false;} else {alert(data.errorMsg);}}});});
java后台:
/** * 获取对应上传的文件 * * @return */ @SuppressWarnings("rawtypes") @RequestMapping("/toGwUpload") @ResponseBody @NeedPermission(true) @NeedLogin(true) public ResponseEntity<Map<String, Object>> toUpload(HttpServletRequest request, HttpSession session) { Map<String, Object> map = new HashMap<String, Object>(); try { map.put("msg", ""); GwAccountBean gwInfo = (GwAccountBean) request.getSession().getAttribute("gwInfo"); if (null == gwInfo) { LOGGER.debug("GW 没有的登录,跳转到登录页面"); map.put("success", 2); map.put("msg", "gw"); map.put("code", 2); return new ResponseEntity<Map<String, Object>>(map, HttpStatus.OK); } // 保存上传的文件 MultipartHttpServletRequest multipartHttpservletRequest = (MultipartHttpServletRequest) request; // MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext()); // MultipartHttpServletRequest multipartHttpservletRequest = resolver.resolveMultipart(request); for (Iterator it = multipartHttpservletRequest.getFileNames(); it.hasNext();) { String key = (String) it.next(); MultipartFile multipartFile = multipartHttpservletRequest.getFile(key); if (multipartFile == null) { map.put("success", 3); map.put("errorMsg", "文件上传异常,请稍后重试"); map.put("code", 1); return new ResponseEntity<Map<String, Object>>(map, HttpStatus.OK); } String html = "";// 转换的html路径与名称 String fileName = multipartFile.getOriginalFilename();// 文件名称 if (!StringUtils.isEmpty(fileName)) { //去掉文件名中的所有空格 fileName = fileName.replaceAll(" ", ""); } String last = fileName.substring(fileName.lastIndexOf("."), fileName.length()); List<String> arrowExtension = Arrays.asList(".xls,.xlsx,.doc,.docx,.pdf".split(",")); if (!arrowExtension.contains(last.toLowerCase())) { map.put("success", 4); map.put("errorMsg", "不能上传该格式的文档"); map.put("code", 1); return new ResponseEntity<Map<String, Object>>(map, HttpStatus.OK); } map.put("fileName", fileName); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String date = sdf.format(new Date()); String path = lieniProperties.getLocalFilePath() + File.separatorChar + date; String picPath = path + File.separatorChar;// 文件保存路径 String filePath = (String) session.getAttribute("filepath");// 文件上传保存的路径 if (StringUtils.isNotBlank(filePath)) {// 上传过 String filePathLast = filePath.substring(filePath.lastIndexOf("."), filePath.length()); if (!filePathLast.equals(last)) { CommonUtil.deleteFile(filePath, null); filePath = filePath.replace(filePathLast, last); } fileName = filePath.substring(filePath.lastIndexOf(File.separatorChar), filePath.length()); html = filePath.substring(0, filePath.lastIndexOf(".")) + ".html"; picPath = picPath + filePath.substring(filePath.lastIndexOf(File.separatorChar) + 1, filePath.lastIndexOf(".")) + File.separatorChar; } else { String name = UUID.randomUUID().toString(); fileName = name + last; html = path + File.separatorChar + name + ".html"; filePath = path + File.separatorChar + fileName; picPath = picPath + name + File.separatorChar; } File targetFile = new File(path, fileName); if (!targetFile.exists()) {// 文件保存路径 targetFile.mkdirs(); } multipartFile.transferTo(targetFile); session.setAttribute("filepath", targetFile.getPath()); map.put("filepath", targetFile.getPath()); map.put("htmlpath", html); map.put("success", 0); map.put("code", 0); } } catch (Exception e) { e.printStackTrace(); map.put("success", 1); map.put("code", 0); map.put("errorMsg", "系统异常,请稍后重试"); } return new ResponseEntity<Map<String, Object>>(map, HttpStatus.OK); }对应的文件存放路径放在了session中,我们可以把对应路径存放在数据库中,如果需要下载或者预览,直接从数据库中读取文件路径
文件下载:
/** * * 文件下载推荐报告 * * @param request * @param downType 1:表示下载推荐报告;2表示下载offer * @param session * @see [相关类/方法](可选) * @since [产品/模块版本](可选) */ @RequestMapping("/toGwDown") @NeedPermission(true) @NeedLogin(true) public void toDown(HttpServletRequest request, HttpServletResponse response, HttpSession session) { FileInputStream fis = null; OutputStream myout = null; BufferedInputStream buff = null; try { GwAccountBean gwInfo = (GwAccountBean) request.getSession().getAttribute("gwInfo"); if (null == gwInfo) { LOGGER.debug(" 没有的登录,跳转到登录页面"); return; } String downType = request.getParameter("downType"); String candidateId = request.getParameter("candidateId"); String jobId = request.getParameter("jobId"); if (StringUtils.isBlank(candidateId) || StringUtils.isBlank(jobId) || StringUtils.isBlank(downType)) { LOGGER.debug("param is null error"); return; } CandidateInfoBean candidateInfoBean = gwOperatorService.queryCandidateInfo(candidateId, gwInfo.getId(), jobId); if (null == candidateInfoBean) { LOGGER.debug("查询不到对应候选人信息"); return; } String fileTypeName = ""; String filePath = ""; if ("1".equals(downType)) { fileTypeName = "报告" + jobId + "-" + candidateInfoBean.getJobName() + "@" + candidateId + "-" + candidateInfoBean.getCandidateName(); filePath = candidateInfoBean.getRecommendReportPath(); } else if ("2".equals(downType)) { fileTypeName = "offer" + jobId + candidateInfoBean.getJobName() + "@" + candidateId + "-" + candidateInfoBean.getCandidateName(); filePath = candidateInfoBean.getOfferAnnexPath(); } else if ("3".equals(downType)) { fileTypeName = "确认函" + jobId + candidateInfoBean.getJobName() + "@" + candidateId + "-" + candidateInfoBean.getCandidateName(); filePath = candidateInfoBean.getEntryConfirmationPath(); } if (StringUtils.isBlank(filePath)) { LOGGER.debug("查询不到对应候选人文件"); return; } filePath = properties.getLocalFilePath() + filePath; String fileType = filePath.substring(filePath.lastIndexOf("."), filePath.length()); response.setContentType(CONTENT_TYPE); // 得到下载文件的名字 // String filename=request.getParameter("filename"); // 解决中文乱码问题 String filename = new String(filePath.getBytes("iso-8859-1"), "gbk"); // 创建file对象 File file = new File(filename); // 设置response的编码方式 response.setContentType("application/x-msdownload"); // 写明要下载的文件的大小 response.setContentLength((int) file.length()); // 设置附加文件名 // response.setHeader("Content-Disposition","attachment;filename="+filename); // 解决中文乱码 response.setHeader("Content-Disposition", "attachment;filename=" + new String((fileTypeName + fileType).getBytes("gbk"), "iso-8859-1")); // 读出文件到i/o流 fis = new FileInputStream(file); buff = new BufferedInputStream(fis); byte[] b = new byte[1024];// 相当于我们的缓存 long k = 0;// 该值用于计算当前实际下载了多少字节 // 从response对象中得到输出流,准备下载 myout = response.getOutputStream(); // 开始循环下载 while (k < file.length()) { int j = buff.read(b, 0, 1024); k += j; // 将b中的数据写到客户端的内存 myout.write(b, 0, j); } // 将写入到客户端的内存的数据,刷新到磁盘 myout.flush(); } catch (Exception e) { e.printStackTrace(); LOGGER.error(e.getMessage()); } finally { try { if (myout != null) { myout.close(); } if (buff != null) { buff.close(); } } catch (IOException e) { LOGGER.error(e.getMessage()); e.printStackTrace(); } } }
文件删除:
/** * * 删除文件 * * @param request * @param session * @return * @see [相关类/方法](可选) * @since [产品/模块版本](可选) */ @RequestMapping("/toGwDelete") @ResponseBody @NeedPermission(true) @NeedLogin(true) public ResponseEntity<Map<String, Object>> toDelete(HttpServletRequest request, HttpSession session) { Map<String, Object> map = new HashMap<String, Object>(); try { map.put("msg", ""); GwAccountBean gwInfo = (GwAccountBean) request.getSession().getAttribute("gwInfo"); if (null == gwInfo) { LOGGER.debug("GW 没有的登录,跳转到登录页面"); map.put("success", 2); map.put("msg", "gw"); map.put("code", 2); return new ResponseEntity<Map<String, Object>>(map, HttpStatus.OK); } // 获取对应文件路径 String filePath = (String) session.getAttribute("filepath");// 上传保存的路径 session.removeAttribute("filepath"); String filetype = filePath.substring(filePath.lastIndexOf(".") + 1, filePath.length()); String htmlPath = filePath.replace(filetype, "html"); // 删除对应文件 if (StringUtils.isNotBlank(filePath)) { File wordFile = new File(filePath); if (wordFile.exists()) {// 文件保存路径 if (wordFile.isFile()) { // 为文件时调用删除文件方法 wordFile.delete(); } } } if (StringUtils.isNotBlank(htmlPath)) { File htmlFile = new File(htmlPath); String dirPath = htmlPath.substring(0, htmlPath.lastIndexOf(".")); if (htmlFile.exists()) {// html保存路径 if (htmlFile.isFile()) { // 为文件时调用删除文件方法 htmlFile.delete(); } } File dirFile = new File(dirPath); if (dirFile.exists() && dirFile.isDirectory()) {// 删除对应图片保存目录及文件 File[] files = dirFile.listFiles(); for (int i = 0; i < files.length; i++) { // 删除子文件 if (files[i].isFile()) { files[i].delete(); } } dirFile.delete(); } } map.put("success", 0); map.put("code", 0); } catch (Exception e) { e.printStackTrace(); map.put("success", 1); map.put("code", 1); map.put("errorMsg", "系统异常,请稍后重试"); } return new ResponseEntity<Map<String, Object>>(map, HttpStatus.OK); }
文件预览可以看另外一篇文章
0 0
- 文件的上传,下载,预览
- 【Ceph】基于Tornado的Ceph文件上传与下载及在线预览
- 文件上传之前的预览功能实现
- 文件上传预览用到的一些CS
- 页面预览上传文件的内容
- 文件上传预览用到的一些CS
- 下载上传的文件
- 文件的上传、下载
- 文件在线预览和下载的实现
- flex 上传文件预览
- html5 文件上传预览
- htm5文件上传预览
- js 上传文件预览
- 图片文件上传预览
- 文件上传-图片预览
- html5文件上传预览
- 改变上传控件的样式以及上传文件的预览
- JSP实现word文档的上传,在线预览,下载
- Java学习之Iterator(迭代器)的一般用法
- [leetcode][DP] Distinct Subsequences
- 第十一周项目4-1:类族的设计-基类-点类
- Kmeans、Kmeans++和KNN算法比较
- 仿微信/支付宝的密码输入框效果 android
- 文件的上传,下载,预览
- MFC ListControl用法
- windows远程桌面用户已达上限
- printk调用过程
- Windows下使用MinGW+msys编译FFmpeg错误
- CGFloat,CGPoint,CGSize,CGRect
- P124 第46题 Fibonacci
- TestNG监听器实现用例运行失败自动截图、重运行功能
- Find Exchange Servers in the Local Active Directory Site using PowerShell