1.js验证上传附件进行校验
//在上提交表单之前对上传文件进行校验
$(".button_add").click(function(){
var files = $("input[name=xxx]");
// alert(files.length);
var maxSize = 5*1024*1024;//设置文件上传的最大占用空间为5M
var checkFile = true;
$.each(files,function(index,file){
if(""== file.value)
{
alert("请上传合同附件!");
checkFile = false;
return;
}
//对上传文件的格式进行校验
var fileType = file.value.substr(file.value.lastIndexOf(".")+1);
if("doc" == fileType || "pdf" == fileType)
{
var fileSize = getFileSize(file); //获取文件大小
if(fileSize > maxSize)
{
alert(file.value+" 文件过大,单个文件最大不超过5M");
checkFile = false;
return;
}
}else
{
alert("文件格式有误,系统只允许上传doc或者pdf格式的附件!")
checkFile = false;
return;
}
});
return checkFile;
});
//获得文件的大小(单位字节) dom为input[type=file]的节点对象
function getFileSize(dom) {
try {
return dom.files[0].size;
} catch (e) {
try {
var img = new Image();
img.dynsrc = dom.value;
img.style.display='none';
document.body.appendChild(img);
setTimeout(function(){
document.body.removeChild(img);
},1000);
return img.fileSize;
} catch (e) {
return -1;
}
}
}
2.后台对上传的附件进行处理
boolean isMultipart = ServletFileUpload.isMultipartContent(request);// 检查输入请求是否为multipart表单数据。
if (isMultipart) {
File f = null;
f=new File(HETONG_DIR);
if(!f.exists()){
f.mkdir();
}
FileItemFactory factory = new DiskFileItemFactory();// 为该请求创建一个DiskFileItemFactory对象,通过它来解析请求。执行解析后,所有的表单项(包括普通字段)都保存在一个List中。
ServletFileUpload upload = new ServletFileUpload(factory);
//upload.setSizeMax(5242800); //交给flash去验证,这里不限制大小了.
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> itr = items.iterator();
FileItem item = null;
while (itr.hasNext()) {
item = itr.next();
// 检查当前项目是普通表单项目还是上传文件。
if(!item.isFormField() && item.getSize() > 0){
String fn = item.getName(); //文件名
//验证扩展名 此处可以对上传的文件名及格式做处理
if(fn.contains(".doc") || fn.contains(".pdf"))
{
try {
fileTempName = HETONG_DIR+File.separator+ fn; //此处文件存储路径需要修改
//记录上传的文件和路径
wenJian+= "{\"filename\":\""+fn+"\",\"path\":\""+fileTempName+"\"},";
f = new File(fileTempName);
item.write(f);
}catch (Exception e) {
request.setAttribute("errorInfo", "保存文件失败!");
logger.error("保存上传的文件失败:"+e.getMessage());
return false;
}
}else {
request.setAttribute("errorInfo", "上传文件格式有误!!");
logger.error("上传文件格式有误!!");
return false;
}
}
//普通表单数据
else {
String name = item.getFieldName();
//对数据进行gbk编码 主要解决中文乱码问题
String value = new String(item.getString().getBytes("ISO8859-1"),"gbk");
if(name.equals("mingChen"))
heTongMingChen = value;
}
}
}
3.下载附件
@Override
public boolean downloadWenJian(HttpServletRequest request,
HttpServletResponse response) {
ServletOutputStream out = null;
try {
out = response.getOutputStream();
String filePath = request.getParameter("filepath");
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
String fileName = new String(filePath.substring(filePath.lastIndexOf("\\")+1).getBytes(),"ISO8859-1");
response.setHeader("Content-Disposition", "attachment;fileName="+fileName);
FileInputStream in = new FileInputStream(new File(filePath));
byte[] buffer = new byte[1024];
while(in.read(buffer)!=-1)
{
out.write(buffer);
}
in.close();
out.flush();
out.close();
return true;
} catch (Exception e) {
request.setAttribute("errorInfo", "下载失败!");
logger.error(e);
}finally{
if(out != null)
{
out = null;
}
}
return false;
}
4.动态增删附件
//添加或移除文件
$("button[name=add]").click(function(){
$("#htwj").append("<div><input type='file' name='heTongFiles'/><a onclick='javascript:removeFile(this);' class='button_del'>删除</a></div>");
});
//填写基本信息时动态增加删除文件
function removeFile(node){
$("#htwj")[0].removeChild(node.parentNode);
}