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;
|
}
|
}
|