最近在做一个ssm的项目,遇到了添加附件和下载的功能,在网上查了很多资料,发现很多都不好用,经过摸索,发现了一套简便的方法,和大家分享一下。
1.文件上传
前台页面使用了easyui,代码如下:
<table> <tr> <td>附件</td> <td> <input class="easyui-filebox" type="file" name="file1" id="file1"><a href="javascript:imageUpload()" class="easyui-linkbutton">上传</a> </td> <td> <input type="hidden" id="ssFile" name="ssFile"> <!--用于文件名回显--> </td> </tr> <table
JS方法调用后台:
function imageUpload(){ var file1 = document.getElementById("file1"); var ssFile = document.getElementById("ssFile"); ssFile.value = file1.value.substring(12); //取出文件名,并赋值回显到文本框,用于向后台传文件名 $.ajaxFileUpload({ url : ‘${pageContext.request.contextPath}/bug/uploadFile.do‘, //用于文件上传的服务器端请求地址 fileElementId : ‘file1‘, //文件上传空间的id属性 <input type="file" id="file" name="file" /> type : ‘post‘, dataType : ‘text‘, //返回值类型 一般设置为json success : function(data, status) //服务器成功响应处理函数 { alert("文件上传成功"); }, error : function(data, status, e)//服务器响应失败处理函数 { alert("文件上传失败"); } }); }
后台实现:
@RequestMapping(value="/uploadFile.do" ,produces="text/html;charset=utf-8" ) public @ResponseBody String importPicFile1( @RequestParam MultipartFile file1,HttpServletRequest request){ Map<String,Object> map= new HashMap<String,Object>(); if(file1.isEmpty()){ map.put( "result", "error"); map.put( "msg", "上传文件不能为空" ); } else{ String originalFilename=file1.getOriginalFilename(); String fileBaseName=FilenameUtils.getBaseName(originalFilename); Date now = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String floderName=fileBaseName+"_" +df.format(now); try{ //创建要上传的路径 File fdir = new File("D:/file"); if (!fdir.exists()) { fdir.mkdirs(); } //文件上传到路径下 FileUtils. copyInputStreamToFile(file1.getInputStream(), new File(fdir,originalFilename)); //coding map.put( "result", "success"); } catch (Exception e) { map.put( "result", "error"); map.put( "msg",e.getMessage()); } }
2.文件下载
前台页面:
<table> <tr> <td>附件</td> <td><a href="" id="ssUrl" class="easyui-linkbutton">下载</a> </td> </tr> </table>
JS方法:
$("#ssUrl").attr(‘href‘,"${pageContext.request.contextPath}/bug/download?filename="+fileName) //将后台的路径和文件名赋值给a标签 fileName需要自己从数据库中查出
后台方法:
/** * 文件下载 * @throws IOException */ @RequestMapping(value="/download",method=RequestMethod.GET) public void download(@RequestParam(value="filename")String filename, HttpServletRequest request, HttpServletResponse response) throws IOException { //模拟文件,myfile.txt为需要下载的文件 String path = "D:\\file"+"\\"+filename; //获取输入流 InputStream bis = new BufferedInputStream(new FileInputStream(new File(path))); //转码,免得文件名中文乱码 filename = URLEncoder.encode(filename,"UTF-8"); //设置文件下载头 response.addHeader("Content-Disposition", "attachment;filename=" + filename); //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型 response.setContentType("multipart/form-data"); BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); int len = 0; while((len = bis.read()) != -1){ out.write(len); out.flush(); } out.close(); }
本人亲测可用,大家有什么意见可以交流,第一次写博客,如有疏漏,请多多指教!
原文地址:https://www.cnblogs.com/noahpk/p/8949862.html
时间: 2024-09-30 00:47:33