jquery+java文件上传下载删除全代码

页面

<p class="text_essas">
	<span>附件:</span>
	<input type="file" name="file" id="file" class="inp_file" style="display:none" />
	<#-- 文件名称保存到此标签 -->
	<input type="hidden" id="fileinput" class="fileinput" name="fileinput" value="" />
	<span id="yl_setfile" class="option_up"><font id="filename" onclick="setfile()" class="l_imgname" title="">添加附件+</font>附件大小不能超过1000.00MB</span>
</p>

js 上传文件

//<#-- 触发文件上传 -->
function setfile(){
    $("#file").click();
}

//冒泡提示
function layertips(msg,obj){
	layer.tips(msg, obj, {
	    tipsMore: true
	});
}

//清空file
function delfile(file){
	file.after(file.clone().val(""));   
	file.remove();
}

//<#-- 文件发生改变change方法 -->
$(document).ready(function(){
	$("#file").live('change', function(){
		var file = $('#'+this.id)
		var fileName = file.val().split('\\'); //得到文件名数组
	    var fileSize =  document.getElementById('file').files[0]; //获得文件大小;
	    filePath = file.val().toLowerCase().split(".");
	    fileType =  filePath[filePath.length - 1]; //获得文件结尾的类型如 zip rar
	    if(!(fileType == "png" || fileType == "jpg")){
	    	//layer的冒泡提示
	        layertips('附件格式不符合要求!',$("#filename"))
	        //清空file
	        delfile(file);
	    }else if(fileSize.size>1048576000){
	        layertips('错误!请上传不超过1000.00MB的附件',$("#filename"))
	        delfile(file);
	    }else{
	    	//文件名回显到页面
			//$("#filename").attr("title",file.val().substring(file.val().lastIndexOf("\\")+1))
			//$("#filename").html(file.val().substring(file.val().lastIndexOf("\\")+1));
	    	uploadFile(file,fileType)
	    }
	});
});


//<#-- 文件上传 -->
function uploadFile(file,fileType){
	var formData = new FormData();
	var name = file.val().substring(file.val().lastIndexOf("\\")+1);
	//uuid 在其他js文件内 后面会给出
	var uuid1 = uuid(32, 16);
	formData.append("file", file[0].files[0]);
	formData.append("name", name);
	formData.append("id",uuid1);	   
	//动态加载上传的文件到页面,,无需刷新页面 				
	$("#yl_setfile").before('<span class="option_up"><input type="hidden" name="fileuuid" fliename="'+name+'" value="'+uuid1+'"><font "delfile('+"'"+uuid1+"'"+',this,'+"'"+fileType+"'"+')" class="l_imgname" title="">删除</font><span class="l_imgname" title="'+name+'" "downloadfile('+"'"+uuid1+"'"+')">'+name+'</span></span><span style="margin-left: 4px;"></span>');
	//文件是一个一个上传的,保存文件信息到数据库的方法可以批量也可以单条
	$.ajax({
		url : get_web_url()+'/api/apply/upload_auditFile.action',
		type: 'POST',
		// 告诉jQuery不要去处理发送的数据
		processData: false,
		// 告诉jQuery不要去设置Content-Type请求头
		contentType: false,
		data : formData,
		beforeSend: function() {
			console.log("正在进行,请稍候");
		},
		success: function(responseStr) {
			if($("#id").val()!=''){
				log($("#id").val())
				//这里是单条的保存上传文件信息,也可以批量
				saveoreditfile($("#id").val());
			}
			console.log("成功" + responseStr);
		},
		error: function(responseStr) {
			console.log("error");
		}
	});
}

js 保存文件信息

//<#-- 获取所有上传文件ID,name -->
//之前动态加载到页面上的文件,不会获取到已经存在的文件,只会获取新上传的文件
function getfileId(){
    //获取的是已经新上传的文件的全部信息,需要其他信息可以自己添加
	var djs = [];
	$("input[name='fileuuid']").each(function(){
		var id = $(this).val();
		var name = $(this).attr("fliename");//<#-- .split(".")[0] 纯名字 -->;
		//这里的name,value和后台的实体类对应
	 	djs.push({'name' : id,'value' : name});
	 	log(djs)
	 });
	return djs;
}

//<#-- 保存文件信息 approval:审批ID,可以批量可以单条,看你什么时候调用了。
//可以每上传一个文件调用一次(单条)、也可以全部上传完毕点击保存按钮调用(批量)-->
function saveoreditfile(approval){
	//获取一下页面的关于文件的信息
	var djs = getfileId();
	$.ajax({
        type:'post',
        url : get_web_url()+'/api/apply/saveoreditfile.action',
        data : {"djs":JSON.stringify(djs),"approval":approval}, 
        success : function(data){
        	//这里的resultVO 内的方法不用在意 自用的方法
            resultVO.checkCode(data, function (data) {
        		if(data){
        			log(data);
	        	}else{
        			log("凉凉");
	        	}
            });
        },
        error : function(){
            layeropen('2','发生意外错误!');
        }
    });
}

//<#-- 删除文件 id 文件信息ID(数据库表ID)、obj当前删除文件,fileType 文件后缀-->
function delfile (id,obj,fileType){
	var conlay = layer.confirm('确定要删除文件吗?', {
		  btn: ['确定','取消'] //按钮
		}, function(){
			$.ajax({
		        type:'post',
		        url : get_web_url()+'/api/apply/delfile.action',
		        data : {"id":id,"fileType":fileType}, 
		        success : function(data){
		            resultVO.checkCode(data, function (data) {
		        		if(data){
		        			//删除一些页面关联标签,因人而异
		        			$(obj).parent().next().remove();
		        			$(obj).parent().remove();
		        			log(data);
		        			layer.close(conlay);
			        	}else{
		        			log("凉凉");
			        	}
		            });
		        },
		        error : function(){
		            layeropen('2','发生意外错误!');
		        }
		    });
		},function(){
	        
	  });
}

//<#-- 文件下载 -->
function downloadfile(id){
	log(id);
	location.href=get_web_url()+'/apply/ResponseEntity.action?id='+id;
}

java 保存文件信息、删除、下载

action


	/**
	 * 上传文件
	 * @param file 文件流
	 * @param id 文件随机ID
	 * @param response
	 * @throws Exception
	 */
	 //这里因为框架内置 不需要加@ResponseBody,正常需要加的
    @RequestMapping("/upload_auditFile")
    public void upload_auditFile(MultipartFile file,String id,HttpServletRequest request,HttpServletResponse response) throws Exception{
    	SysUser sysUser = (SysUser) request.getSession().getAttribute("sysUser");
        String result =  applyService.upload_auditFile(file,id,sysUser.getId());
        JSONObject obj = new JSONObject();
        if(!"error".equals(result)&&!"fileMax".equals(result)){
            obj.put("result", "ok");
        }else{
            obj.put("result", result);
        }
        PrintWriter out = response.getWriter();
        obj.put("fileName", file.getOriginalFilename());
        obj.put("filePath", result);
        response.setStatus(HttpServletResponse.SC_OK);
        response.setContentType("text/html");
        out.print(obj.toString());
    }
    
	/**
	 * 保存文件信息
	 * @param request
	 * @param djs 文件信息
	 * @param filestepid 步骤ID
	 * @param approval 审批流程ID
	 * @return
	 */
	@RequestMapping("/saveoreditfile")
	public ResultVO saveoreditfile(HttpServletRequest request,String djs,String filestepid, String approval) {
		SysUser sysUser = (SysUser) request.getSession().getAttribute("sysUser");
		// html字符转义 import org.apache.commons.text.StringEscapeUtils;
	    djs = StringEscapeUtils.unescapeHtml4(djs);
	    List<jsonbean> arrayList = (List<jsonbean>) JSON.parseArray(djs, jsonbean.class);
	    System.out.println(arrayList);
    	return new ResultVO(applyService.saveoreditfile(arrayList, filestepid, approval,sysUser));
	}
	/**
	 * JSON转换实体类
	 * @author XNYLH
	 *
	 */
	public class jsonbean {
		private String name;
	    private String value;
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getValue() {
			return value;
		}
		public void setValue(String value) {
			this.value = value;
		}
		@Override
		public String toString() {
			return "jsonbean [name=" + name + ", value=" + value + "]";
		}
	}
	/**
	 * 删除文件
	 * @param request
	 * @param djs
	 * @param filestepid
	 * @param approval
	 * @return
	 */
	@RequestMapping("/delfile")
	public ResultVO delfile(HttpServletRequest request,String id,String fileType) {
    	return new ResultVO(applyService.delfile(id,fileType));
	}
	/**
	 * 文件下载
	 * @return
	 */
	@RequestMapping("/ResponseEntity")
	public ResponseEntity<byte[]> ResponseEntity(String id) throws IOException{
		//获取文件信息
		OaFlowFile oaFlowFile = applyService.getOaFlowFile(id);
		System.out.println(id+oaFlowFile);
		if(oaFlowFile!=null) {
			//这里就是文件路径
			String webPath = Platform.getInstance().getGlobal().get("attachPath");
			String filePath = webPath + oaFlowFile.getFileUrl();
			String realFileName;
			File file = new File(filePath);
			HttpHeaders headers = new HttpHeaders();
			realFileName = 	new String(oaFlowFile.getFileName().getBytes("ISO-8859-1"),"utf-8");
			headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
			//realFileName = URLEncoder.encode(realFileName, "UTF-8");
			headers.setContentDispositionFormData("attachment", realFileName);
			//import org.springframework.http.ResponseEntity;
			//import org.springframework.http.HttpHeaders;
			//import org.springframework.http.HttpStatus;
			//import org.springframework.http.MediaType;
			return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),
			headers, HttpStatus.OK);
		}
		return null;
	}

serverImpl

	//文件上传
	@Override
	public String upload_auditFile(MultipartFile file, String id, String userid) throws IOException {
		String fileName = file.getOriginalFilename();
        String filePath = id + fileName.substring(fileName.lastIndexOf("."), fileName.length());
        String webPath = Platform.getInstance().getGlobal().get("attachPath");
        filePath = File.separator +/*userid*/"apply" + File.separator + filePath;
        String path = webPath + filePath;
        File f = new File(path);
        if (!f.exists()) {
            f.getParentFile().mkdirs();
            f.createNewFile();
        }
        File fileUpload = new File(path);
        file.transferTo(fileUpload);
        return filePath;
	}

	//保存文件信息
	@Override
	public boolean saveoreditfile(final List<jsonbean> arrayList, final String filestepid, final String approval, SysUser sysUser) {
		//arrayList 获取的总是页面当前新添加的文件,最新的
		//所以修改即为保存,先删除再重新添加(我就是个小机灵鬼)因为使用批量所以性能不会有问题,很快
		String sql = "DELETE FROM OA_FLOW_FILE WHERE id = ? ";
		final String sysuserid = sysUser.getId();
        if(arrayList!=null&&arrayList.size()>0) {
        	jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
    			@Override
    			public void setValues(PreparedStatement ps, int i) throws SQLException {
    				ps.setString(1, arrayList.get(i).getName());
    			}
    			@Override
    			public int getBatchSize() {
    				return arrayList.size();
    			}
    		});
    		String sql1 = "INSERT INTO OA_FLOW_FILE (ID,FILE_URL,FLOW_TABLE_ID,USER_ID,SETP_ID,FILE_NAME) VALUES (?,?,?,?,?,?) ";
    		jdbcTemplate.batchUpdate(sql1, new BatchPreparedStatementSetter() {
    			@Override
    			public void setValues(PreparedStatement ps, int i) throws SQLException {
    				ps.setString(1, arrayList.get(i).getName());
    				ps.setString(2, File.separator +"apply" + File.separator + arrayList.get(i).getName() + arrayList.get(i).getValue().substring(arrayList.get(i).getValue().lastIndexOf("."), arrayList.get(i).getValue().length()));
    				ps.setString(3, approval);
    				ps.setString(4, sysuserid);
    				ps.setString(5, filestepid);
    				ps.setString(6, arrayList.get(i).getValue());
    			}
    			@Override
    			public int getBatchSize() {
    				return arrayList.size();
    			}
    		});
    		return true;
        }
		return false;
	}


	//删除文件
	@Override
	public boolean delfile(String id,String fileType) {
		String path;
		String webPath = Platform.getInstance().getGlobal().get("attachPath");
		//获取文件信息
		OaFlowFile oaFlowFile = get_oaflow_file(id);
		if(oaFlowFile!=null) {
			//如果文件信息是空的,就没有文件路径了
	        path = webPath + oaFlowFile.getFileUrl();
		}else {
			//所以这里拼出路径
			path = webPath + File.separator +/*userid*/"apply" + File.separator + id + "."+fileType;
		}
        File file = new File(path);
        if (file.exists() && file.isFile()) {
            if (file.delete()) {
                System.out.println("删除文件成功!");
                if(oaFlowFile!=null) {
                	//没有信息自然不需要清空信息
                	baseTransaction.deleteById(OaFlowFile.class, id);
                }
                return true;
            } else {
                System.out.println("删除文件失败!");
                return false;
            }
        } else {
            System.out.println("删除文件失败:不存在!");
            return false;
        }
	}

好啦!差不多到这啦!QAQ 这里uuid的百度云链接 ~~ 我才不告诉你密码是 smn6 呢!!!

posted @ 2019-03-29 16:16  羽渡尘  阅读(455)  评论(0编辑  收藏  举报