效果图:
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方法,只是替换了一下文件名,将文件名置换为空字符串,之前说过,以前是按照逗号隔离开的。
2860

被折叠的 条评论
为什么被折叠?



