文件下载

来源:互联网 发布:斯托克顿生涯数据 编辑:程序博客网 时间:2024/06/05 14:48

效果图:


html页面:在<td>里放一个id,页面默认加载的时候,加载那多个已经上传的附件

<span style="white-space:pre"><pre name="code" class="html"><tr><td><label>附件:</label></td><td id="pu_files"></td></tr>

数据库里的不同的附近是以逗号隔开

页面默认加载的js:

$(function () {$("#enable").combobox("select",'${practiceUnit.isDeleted}');//加载行业信息loadIndustry();//加载城市信息loadCity();//处理福利var v_array=new Array();var value='${practiceUnit.benefits}';if(value!=null&&value!=undefined&&value!=""){v_array=value.split(",");}for(var i=0;i<v_array.length;i++){$("#benefit_"+parseInt(v_array[i])).prop("checked",true);}//处理附件//处理附件的显示var fujian="";var fj_array=new Array();var fj_value='${practiceUnit.attachment}';if(fj_value!=null&&fj_value!=undefined){fj_array=fj_value.split(",");}if(fj_array.length>0){for(var i=0;i<(fj_array.length-1);i++){var arr = fj_array[i].split('/');var abc = arr[arr.length -1];fujian +='<h6>';fujian +="<a href='<%= request.getContextPath() %>/manage/practiceUnit/"+abc+"/download'>"+abc+"</a>  ";fujian +="<a href='#' onclick='deleteAttach(this,\""+abc+"\","+'${practiceUnit.id}'+")'>删除</a><br/>";fujian +='</h6>';}}fujian +='<input type="button" value="添加附件" onclick="addFile()"/>';$("#pu_files").html(fujian);     });//添加文件    function addFile(){    var strFile="<h6><input name=\"myfiles\" type='file'  style='WIDTH:350px;'/>";     var deleButton="<input  type='button'  value='删除' onclick=\"deleteFile(this)\"/><br/></h6>";     document.getElementById("pu_files").insertAdjacentHTML("beforeEnd",strFile+deleButton);    }     //移除添加的文件     function deleteFile(o) {       while (o.tagName != "H6"){  o = o.parentNode;}       o.parentNode.removeChild(o);     }   //删除附件 function deleteAttach(o,fileName,rowId){  $.post('<%= request.getContextPath() %>/manage/practiceUnit/'+fileName+'/deleteAttach/'+rowId, function(result) {  if (result.info){ $.messager.show({ title: 'Success', msg: result.info }); //删除页面元素 deleteFile(o);  } else { $.messager.show({ title: 'Error', msg: result.error }); }  //reloadTree(); }, 'json');  }

附件的下载,就是在文件名外嵌套a标签

后台的代码

/** * 下载单个文件 *  * @param fileName * @param request * @param response * @return * @throws IOException */@RequestMapping(value = "/{fileName}/download")public String download(@PathVariable("fileName") String fileName, HttpServletRequest request,HttpServletResponse response) throws IOException {response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("UTF-8");java.io.BufferedInputStream bis = null;java.io.BufferedOutputStream bos = null;String realPath = request.getSession().getServletContext().getRealPath("/upload/files/");// String ctxPath =// request.getSession().getServletContext().getRealPath("/")+ "\\" +// "images\\";String downLoadPath = realPath + fileName;try {long fileLength = new File(downLoadPath).length();response.setContentType("application/x-msdownload;");response.setHeader("Content-disposition","attachment; filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));response.setHeader("Content-Length", String.valueOf(fileLength));bis = new BufferedInputStream(new FileInputStream(downLoadPath));bos = new BufferedOutputStream(response.getOutputStream());byte[] buff = new byte[2048];int bytesRead;while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {bos.write(buff, 0, bytesRead);}} catch (Exception e) {e.printStackTrace();} finally {if (bis != null)bis.close();if (bos != null)bos.close();}return null;}/** * 删除附件 *  * @param fileName * @param id * @return */@RequestMapping(value = "/{fileName}/deleteAttach/{id}")public String deleteAttach(Model model, @PathVariable("fileName") String fileName, @PathVariable("id") Long id) {try {PracticeUnit practiceUnit = practiceUnitService.getById(id);String attachment = practiceUnit.getAttachment();fileName = fileName.trim();String ls = attachment.replaceAll("/upload/files/" + fileName + ",", "");practiceUnit.setAttachment(ls);practiceUnitService.update(practiceUnit);model.addAttribute("info", "删除文件成功!");} catch (Exception e) {logger.error("删除文件失败!", e);model.addAttribute("error", "删除文件失败!");}return JSON;}


说明:

1.download 方法,fileName放在中间,是因为 比如1.png,传不过来,放在中间就能传过来了

2.deleteAttach方法,只是替换了一下文件名,将文件名置换为空字符串,之前说过,以前是按照逗号隔离开的。




0 0
原创粉丝点击