最近做了一个项目,用户有大量的图片,放在非TOMCAT发布目录下面。现在我的做法是如果要访问图片,我先将图片拷贝到webapps的应用下面,再生成一个html的链接,如 http://localhost:8080/pm/tmp/6k6CuueOZZijCmDPGutIlA.jpg, 现在的问题是我在过滤器中可以拦截此请求,我想栏接此请求后,将用户目录下的那个文件发送给客户,如何做呢,请高人指点。

解决方案 »

  1.   

    对你的描述不是很明白。猜测你可能希望实现以下功能。 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
    FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest)servletRequest;
    HttpServletResponse response = (HttpServletResponse)servletResponse;
    File  file = getFile(request);
    if(file.exists()){
    response.setContentType("image/jpg");
    }else{
    response.setContentType("text/html; charset=ISO-8859-1");
    PrintWriter printWriter = response.getWriter();
    printWriter.write("no image");
    printWriter.flush();
    printWriter.close();
    return;
    }
    ServletOutputStream outputStream = response.getOutputStream();
    FileInputStream inputStream = new FileInputStream(file);
    byte[] buffer = new byte[1024];
    int readC;
    while((readC = inputStream.read(buffer)) != -1 ){
    outputStream.write(buffer, 0, readC);
    outputStream.flush();
    }
    inputStream.close();
    outputStream.close();
    return ;
    }

    /**
     * 根据请求获取用户要访问的图片所对应的 File.
     * @param request
     * @return
     */
    private File getFile(HttpServletRequest request){
    // return new File("E:\\life\\杭州\\104_FUJI\\DSCF4115.JPG");
    return new File("D:\\gif001.jpg");
    }