81,092
社区成员
发帖
与我相关
我的任务
分享
<!--
/web-inf/web.xml 配一个过滤器
用来拦截 /userfiles/image/ 下的所有请求
-->
<servlet>
<servlet-name>FixPathName</servlet-name>
<servlet-class>cn.ialvin.servlet.FixPathName</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FixPathName</servlet-name>
<url-pattern>/userfiles/image/*</url-pattern>
</servlet-mapping>
package cn.ialvin.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.regex.Pattern;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FixPathName extends HttpServlet {
private static final long serialVersionUID = 1L;
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String actionPath = request.getRequestURI();
actionPath = actionPath.replaceFirst("^" + Pattern.quote(request.getContextPath()), "");
actionPath = java.net.URLDecoder.decode(actionPath, "UTF-8");
// System.out.println(actionPath);
File file = new File(this.getServletContext().getRealPath(actionPath));
if (!file.exists()) {
response.sendError(404);
return;
}
response.setContentType("*/*");
response.setCharacterEncoding("UTF-8");
response.addHeader(
"Content-Disposition",
"attachment; filename=" + URLEncoder.encode(file.getName(), "UTF-8")
);
FileInputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();
byte[] bytes = new byte[64*1024];
int c;
while ((c = in.read(bytes)) > 0) {
out.write(bytes, 0, c);
out.flush();
}
out.close();
}
}