spring multipart上传附件,下载,预览实现

js:

1.上传:

//上传附件
function openUpload(){
	var file = $("input[name='fileUpload']").val();
	if(file == ""){
		$.messager.alert("上传","请上传附件!");
	}else {
		$.ajaxFileUpload({
        	url: G_CTX_PATH+'/offer/relationManager/doFileUpload', //用于文件上传的服务器端请求地址
        	type: 'post',
        	secureuri: false, //是否需要安全协议,一般设置为false
        	fileElementId: 'fileUpload', //文件上传域的ID
        	dataType: 'text', //返回值类型 一般设置为json
        	success: function (data, status){//服务器成功响应处理函数
        		var $tr = $("<tr>"+  
                        	"<td></td>"+  
                        	"<td colspan='3'><a style='color:#0000FF' onClick=openWin(this,'"+data+"') >"+data+"</a>      " +
                        	"<a style='color:#FF0000;' onClick=deleteWin(this,'"+data+"')>删除</a></td>"+  
                        	"</tr>"); 
        		var $table = $("#contract");  
            	$table.append($tr); 
            
            	fileNames.push(data);
            
            	$("input[name='fileNames']").val(fileNames);
        	},
        	error: function (data, status, e){//服务器响应失败处理函数
        	}
    	});
    }
}

2.预览:

//打开附件
function openLocal(fileName){
	$("#divChooseNumber").hide();
	
	var url = G_CTX_PATH + "/fileUpload/" + fileName;
	window.open(url);
	
	//var url = "/offer/relationManager/openLocal?fileName="+fileName;
	//window.location.href=G_CTX_PATH+url;
}

3.下载:

//下载附件
function downloadLocal(fileName){
	$("#divChooseNumber").hide();
	
	var url = "/offer/relationManager/downloadLocal?fileName="+fileName;
        //var url = "/offer/relationManager/download?fileName="+fileName;
        window.location.href=G_CTX_PATH+url;
}

java:

	/**
	 * 上传
	 * @param request
	 * @param response
	 * @return
	 * @throws IOException
	 */
	@RequestMapping(value = "/doFileUpload")
	@ResponseBody
	public String doFileUpload(final HttpServletRequest request,  
            HttpServletResponse response) throws IOException  { 
//		String fileName = null; 
//		
//		DiskFileItemFactory factory = new DiskFileItemFactory();
//		
//		ServletFileUpload upload = new ServletFileUpload(factory);  
//		
//		try {  
//            List<FileItem> items = upload.parseRequest(request);  
//            for(FileItem item : items) {  
//                //其他参数  
//                String type = item.getContentType();  
//                if(type == null) {  
//                    continue;  
//                }  
//                  
//                //文件参数  
//                fileName = item.getName();  
//                  
//                //设置保存文件路径  
//                String realPath = request.getServletContext().getRealPath("/image");  
//                File dir = new File(realPath);  
//                File f = new File(dir, fileName);  
//                  
//                if(f.exists()) {  
//                    f.delete();  
//                }  
//                f.createNewFile();  
//                  
//                //保存  
//                item.write(f);  
//                  
//            }  
//        } catch (FileUploadException e) {  
//            e.printStackTrace();  
//        } catch (Exception e) {  
//            e.printStackTrace();  
//        } 
		
		String fileName = null;
		
		//文件物理路径
		String filePath = request.getServletContext().getRealPath("/");
		
		//创建一个通用的多部分解析器.
		CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
		
		//设置编码  
		commonsMultipartResolver.setDefaultEncoding("utf-8");  
		
		//判断 request 是否有文件上传,即多部分请求...  
		if (commonsMultipartResolver.isMultipart(request)){
			//转换成多部分request  
		    MultipartHttpServletRequest multipartRequest =   (MultipartHttpServletRequest) request; 
//		    MultipartHttpServletRequest multipartRequest =   commonsMultipartResolver.resolveMultipart(request);  //获取不到文件
		    
//		    Iterator<String> it = multipartRequest.getFileNames();
//		    while (it.hasNext()) {
//				MultipartFile file = multipartRequest.getFile(it.next());
//		    }
		    
		    // file 是指 文件上传标签的 name=值  
		    // 根据 name 获取上传的文件... 
		    MultipartFile file = multipartRequest.getFile("fileUpload");  
		    fileName = file.getOriginalFilename();
		    
		    String path = filePath + "fileUpload/" + fileName; //上传路径
		    
		    File uploadFiile = new File(path);
		    file.transferTo(uploadFiile);
		    
		}
		
		return fileName;  
	}
	
	/**
	 * 下载
	 * @param request
	 * @param response
	 * @throws FileNotFoundException
	 */
	@RequestMapping(value = "/downloadLocal")
	@ResponseBody
	public void downloadLocal(HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException {
        // 下载本地文件
        String fileName = request.getParameter("fileName"); // 文件的默认保存名
        
        String filePath = request.getServletContext().getRealPath("/");
        
        // 读到流中
        InputStream inStream = new FileInputStream(filePath + "fileUpload/" + fileName);// 文件的存放路径
        // 设置输出的格式
        response.reset();
        response.setContentType("bin");
        response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
        // 循环取出流中的数据
        byte[] b = new byte[100];
        int len;
        try {
            while ((len = inStream.read(b)) > 0)
                response.getOutputStream().write(b, 0, len);
            inStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
	
	/**
	 * 打开
	 * @param request
	 * @param response
	 * @throws IOException
	 */
	@RequestMapping(value = "/openLocal")
	@ResponseBody
	public void openLocal(HttpServletRequest request, HttpServletResponse response) throws IOException {
		boolean isOnLine = true;
		
		String fileName = request.getParameter("fileName");
		String filePath = request.getServletContext().getRealPath("/") + "fileUpload/" + fileName;
		
		File f = new File(filePath);
        if (!f.exists()) {
            response.sendError(404, "File not found!");
            return;
        }
        BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
        byte[] buf = new byte[1024];
        int len = 0;

        response.reset(); // 非常重要
        if (isOnLine) { // 在线打开方式
            URL u = new URL("file:///" + filePath);
            response.setContentType(u.openConnection().getContentType());
            response.setHeader("Content-Disposition", "inline; filename=" + f.getName());
            // 文件名应该编码成UTF-8
        } else { // 纯下载方式
            response.setContentType("application/x-msdownload");
            response.setHeader("Content-Disposition", "attachment; filename=" + f.getName());
        }
        OutputStream out = response.getOutputStream();
        while ((len = br.read(buf)) > 0)
            out.write(buf, 0, len);
        br.close();
        out.close();
    }
	
	/**
	 * 下载2
	 * @param request
	 * @param response
	 * @return
	 */
	@RequestMapping(value = "/download")
	@ResponseBody
	public HttpServletResponse download(HttpServletRequest request, HttpServletResponse response) {
        try {
        	String fileName = request.getParameter("fileName");
    		String path = request.getServletContext().getRealPath("/") + "fileUpload/" + fileName;
    		
            // path是指欲下载的文件的路径。
            File file = new File(path);
            // 取得文件名。
            String filename = file.getName();
            // 取得文件的后缀名。
            String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();

            // 以流的形式下载文件。
            InputStream fis = new BufferedInputStream(new FileInputStream(path));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            // 清空response
            response.reset();
            // 设置response的Header
            response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
            response.addHeader("Content-Length", "" + file.length());
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return response;
    }



猜你喜欢

转载自blog.csdn.net/caisenbinbeida2009/article/details/45074837