package org.imos.manager.action;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BaseServlet extends HttpServlet {
@Override
/**
* 进行消息转发
*/
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//get method name
String action = request.getParameter("action");
Class clazz = this.getClass();
Class[] types = {HttpServletRequest.class,HttpServletResponse.class};
try {
Method method = clazz.getDeclaredMethod(action, types);
method.setAccessible(true);
Object objs [] = {request,response};
method.invoke(this, objs);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
throw (RuntimeException)e.getTargetException();
}
}
}
public class FileUploadAndDownload extends BaseServlet {
public void fileDownload(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException{
String filepath = request.getParameter("filepath");
// web绝对路径
String path = request.getSession().getServletContext().getRealPath("/");
// 设置为下载application/x-download
response.setContentType("application/x-download");
// 即将下载的文件在服务器上的绝对路径
String filenamedownload = path + "/" + filepath;
// 下载文件时显示的文件保存名称
String filenamedisplay = filepath.substring(filepath.lastIndexOf("/")+1) ;
// 中文编码转换
filenamedisplay = URLEncoder.encode(filenamedisplay, "UTF-8");
response.addHeader("Content-Disposition", "attachment;filename="+ filenamedisplay);
try {
java.io.OutputStream os = response.getOutputStream();
java.io.FileInputStream fis = new java.io.FileInputStream(filenamedownload);
byte[] b = new byte[1024];
int i = 0;
while ((i = fis.read(b)) > 0) {
os.write(b, 0, i);
}
fis.close();
os.flush();
os.close();
} catch (Exception e) {
}
}
}