| package com.matrix.system.hive.plugin.util; | 
|   | 
| import java.io.BufferedOutputStream; | 
| import java.io.File; | 
| import java.io.FileInputStream; | 
| import java.io.FileNotFoundException; | 
| import java.io.IOException; | 
| import java.io.OutputStream; | 
| import java.net.URLEncoder; | 
| import java.nio.ByteBuffer; | 
| import java.nio.channels.FileChannel; | 
|   | 
| import javax.servlet.http.HttpServletResponse; | 
|   | 
| public class FileDownload { | 
|   | 
|     /** | 
|      * @param response | 
|      * @param filePath | 
|      *            //文件完整路径(包括文件名和扩展名) | 
|      * @param fileName | 
|      *            //下载后看到的文件名 | 
|      * @return 文件名 | 
|      */ | 
|     public static void fileDownload(final HttpServletResponse response, String filePath, String fileName) throws Exception { | 
|   | 
|         byte[] data = toByteArray2(filePath); | 
|         fileName = URLEncoder.encode(fileName, "UTF-8"); | 
|         response.reset(); | 
|         response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); | 
|         response.addHeader("Content-Length", "" + data.length); | 
|         response.setContentType("application/octet-stream;charset=UTF-8"); | 
|         OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); | 
|         outputStream.write(data); | 
|         outputStream.flush(); | 
|         outputStream.close(); | 
|         response.flushBuffer(); | 
|   | 
|     } | 
|   | 
|     /** | 
|      * 读取到字节数组2 | 
|      *  | 
|      * @param filePath | 
|      * @return | 
|      * @throws IOException | 
|      */ | 
|     public static byte[] toByteArray2(String filePath) throws IOException { | 
|   | 
|         File f = new File(filePath); | 
|         if (!f.exists()) { | 
|             throw new FileNotFoundException(filePath); | 
|         } | 
|   | 
|         FileChannel channel = null; | 
|         FileInputStream fs = null; | 
|         try { | 
|             fs = new FileInputStream(f); | 
|             channel = fs.getChannel(); | 
|             ByteBuffer byteBuffer = ByteBuffer.allocate((int) channel.size()); | 
|             while ((channel.read(byteBuffer)) > 0) { | 
|             } | 
|             return byteBuffer.array(); | 
|         } catch (IOException e) { | 
|             e.printStackTrace(); | 
|             throw e; | 
|         } finally { | 
|             try { | 
|                 channel.close(); | 
|             } catch (IOException e) { | 
|                 e.printStackTrace(); | 
|             } | 
|             try { | 
|                 fs.close(); | 
|             } catch (IOException e) { | 
|                 e.printStackTrace(); | 
|             } | 
|         } | 
|     } | 
|   | 
|     public static String getClasspath() { | 
|         String path = (String.valueOf(Thread.currentThread().getContextClassLoader())).replaceAll("file:/", "").replaceAll("%20", " ").trim(); | 
|         if (path.indexOf(":") != 1) { | 
|             path = File.separator + path; | 
|         } | 
|         return path; | 
|     } | 
| } |