`
843977358
  • 浏览: 241620 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用java实现下载文件

    博客分类:
  • java
阅读更多
方法一:
/**
     * 下载附件
     * @param response
     * @throws IOException 
     * @author zhangyd-c
     */
    @RequestMapping(value="/downloadAccessory")
	public void downloadAccessory(String fileName, HttpServletResponse response, HttpServletRequest request) throws IOException
		{
    		request.setCharacterEncoding("utf8");
    		//获取项目真实路径
			String ctxPath = (new StringBuilder(String.valueOf(request.getSession().getServletContext().getRealPath("/")))).append("unstandard_materials/").toString();
			//获取文件的真实路径
			String downLoadPath = (new StringBuilder(String.valueOf(ctxPath))).append(fileName).toString();
			File files = null;
			InputStream fis = null;
			OutputStream os = null;
			try {
				//获取文件
				files = new File(downLoadPath);
				//读取该文件输入流到缓存
				fis = new BufferedInputStream(new FileInputStream(downLoadPath));
				/*
				 * fis.available():返回输入流中估计的字节数(输入流方法的下一次调用的剩余字节数)。
				 */
				byte buffer[] = new byte[fis.available()];
				//按字节读取缓存
				fis.read(buffer);
				response.reset();
				response.addHeader("Content-Disposition", (new StringBuilder("attachment;filename=")).append(new String(fileName.replaceAll(" ", "").getBytes("utf-8"), "iso8859-1")).toString());
				response.addHeader("Content-Length", (new StringBuilder()).append(files.length()).toString());
				os = new BufferedOutputStream(response.getOutputStream());
				response.setContentType("application/octet-stream");
				//将字节数组写入输出流
				os.write(buffer);
				os.flush();
			} catch (FileNotFoundException e) {
				response.setContentType("text/html;charset=UTF-8");
				response.getWriter().write("服务器上不存在该附件(已丢失)!请联系管理员!");
			} catch (IOException e) {
				response.setContentType("text/html;charset=UTF-8");
				response.getWriter().write("服务器异常!请联系管理员!");
			}finally{
				if(fis != null){
					fis.close();
				}
				if(os != null){
					os.close();
				}
			}
		}

 方法二:

/**
     * 下载附件
     * @param response
     * @throws IOException 
     */
    @RequestMapping(value="/downloadAccessory")
	public void downloadAccessory(String fileName, HttpServletResponse response, HttpServletRequest request) throws IOException
		{
    		request.setCharacterEncoding("utf8");
    		response.setContentType("application/octet-stream; charset=utf-8");
    		//获取项目真实路径
			String ctxPath = (new StringBuilder(String.valueOf(request.getSession().getServletContext().getRealPath("/")))).
					append("unstandard_materials/").toString();
			//获取文件的真实路径
			String downLoadPath = (new StringBuilder(String.valueOf(ctxPath))).append(fileName).toString();
			OutputStream out = null;
			 try {
				response.reset();
				 String na = new String(fileName.getBytes("gbk"), "iso8859-1");
				 response.setHeader("Content-Disposition", "attachment; filename="+na);
				 out = response.getOutputStream();
				 out.write(FileUtils.readFileToByteArray(new File(downLoadPath)));
				 out.flush();
			}   catch (IOException e) {
				response.setContentType("text/html;charset=UTF-8");
				response.getWriter().write("服务器异常!请联系管理员!");
			}finally{
				if(out != null){
					out.close();
				}
			}
			
		}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics