Servlets Servlet返回未设置动画的GIF图像

Servlets Servlet返回未设置动画的GIF图像,servlets,gif,Servlets,Gif,首先,在我的servlet中,我使用了来自某个博客的图像servlet jar,我的图像工作正常。但问题是,任何人都可以使用inspect元素并将url附加到。/来访问其他目录,这也是一个很大的安全问题。所以我问了一个问题,人们建议我自己编写代码,因为这很容易,我可以完全控制 这是我的代码 String path1=getServletConfig().getServletContext().getRealPath(""); System.out.println(pa

首先,在我的servlet中,我使用了来自某个博客的图像servlet jar,我的图像工作正常。但问题是,任何人都可以使用inspect元素并将url附加到
。/
来访问其他目录,这也是一个很大的安全问题。所以我问了一个问题,人们建议我自己编写代码,因为这很容易,我可以完全控制

这是我的代码

    String path1=getServletConfig().getServletContext().getRealPath("");      
    System.out.println(path1);  // /usr/share/tomcat7/webapps/myProject    
    String l = File.separator;

    f = new File(path1+l+"images"+l+"load.gif"); 
    BufferedImage bi = ImageIO.read(f);
    OutputStream out = response.getOutputStream();
    ImageIO.write(bi, "gif", out);
    out.close();
它工作得很好,但问题是图像不再具有动画效果。我试着下载并打开它,但它没有动画效果

所以我猜在将文件读入BuffereImage的过程中发生了一些变化

这些图像看起来像这些


您可以在inspect元素或source中看到两者都是gif,但只有一个正在制作动画

您只是发送图像的第一帧

ImageIO.read仅读取第一帧(而BuffereImage只能包含单个帧/图像)

您可以通过发送任何二进制内容所使用的相同技术来实现它

 String path1=getServletConfig().getServletContext().getRealPath("");      
 System.out.println(path1);  // /usr/share/tomcat7/webapps/myProject    
 String l = File.separator;

 f = new File(path1+l+"images"+l+"load.gif"); 
 OutputStream out = response.getOutputStream();
 InputStream in = new FileInputStream(f);

 try {
         byte[] buffer = new byte[1024]; 
         int count;

         while ((count = in.read(buffer)) != -1) {
           out.write(buffer, 0, count);
         }

// Flush out stream, to write any remaining buffered data
out.flush();
 }
finally {
in.close(); 
}


 out.close();
归功于