1 总体
1.1 文件下载
1.1.1 客户端
var url = "/services/fileServlet";
url += "?beanId=" + beanId;
url += "&method=" + method;
url += "¶ms=" + $.toJSON(params);
var frame = document.getElementById("downloadHideFrame");
if (!frame) {
$("body").append("<iframe id='downloadHideFrame' name='downloadHideFrame' src='' width=0 height=0></iframe>");
}
window.open(url, 'downloadHideFrame');
1.1.2 服务端
主要要注意 Content-Disposition,ContentLength 和 ContentType。
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String beanId = request.getParameter("beanId");
String method = request.getParameter("method");
String params = request.getParameter("params");
Object[] objects = JSONOperUtils.JSONToArray(params);
Object bean = BeanFactory.getBean(beanId);
File file = null;
try {
file = (File) MethodUtils.invokeMethod(bean, method, objects);
} catch (Exception e) {
e.printStackTrace();
}
//文件名称
response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());
response.setContentLength((int) file.length());
response.setContentType("application/zip");
InputStream in = null;
try {
in = new BufferedInputStream(new FileInputStream(file));
FileCopyUtils.copy(in, response.getOutputStream());
response.flushBuffer();
} catch (Exception e) {
e.printStackTrace();
} finally {
FileUtils.closeQuietly(in);
file.delete();
}
}
1.2 动态增加 java.library.path
private static void addLibraryDir(String libraryPath) throws Exception {
Field userPathsField = ClassLoader.class.getDeclaredField("usr_paths");
userPathsField.setAccessible(true);
String[] paths = (String[]) userPathsField.get(null);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < paths.length; i++) {
if (libraryPath.equals(paths[i])) {
continue;
}
sb.append(paths[i]).append(';');
}
sb.append(libraryPath);
System.setProperty("java.library.path", sb.toString());
final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);
}