2013-07-25 61 views
0

这是我用来下载图像和保存的代码。任何人都可以提出还有什么我必须做的或我在这里错过了什么?由于事先无法打开图像希望从httpservletrequest下载并保存在本地光盘

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    BufferedWriter writer = null; 
    InputStream in = new BufferedInputStream(request.getInputStream()); 
      try {      
     byte[] buffer = new byte[100000]; 
     int n = -1; 
     while ((n = in.read(buffer)) >= 0) { 
      out.write(buffer, 0, n); // used for image 
     } 
     out.close(); 
     byte[] res = out.toByteArray(); 
     out.flush(); 
     FileOutputStream fos = new FileOutputStream("D://"+ new SimpleDateFormat("yyyyMMdd_HHmmssss").format(Calendar.getInstance().getTime()) +".jpg"); 
     fos.write(res); 
     fos.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

@Manish我不想在程序中打开,只是在文件系统中打开保存的文件,但照片查看器无法打开图片 – RDD

+0

如果您愿意从某个servlet下载某个文件,您将不得不将byte []写为servlet响应。 – manish

+0

检查这[SO](http://stackoverflow.com/questions/1154254/help-getting-image-from-servlet-to-jsp-page)和[这个SO问题](http://stackoverflow.com/问题/ 8623709 /输出的图像文件-从-A-的servlet) – manish

回答

0

可能是因为你没有设置响应报头和内容type.try此

protected void doGet(HttpServletRequest request,HttpServletResponse response) 
    { 
     try { 
      Path path = Paths.get("c:\\test.jpg"); 
      response.setHeader("Content-Length", ""+Files.size(path)); 
      response.setContentType("image/jpeg"); 
      response.setHeader("Content-Disposition", "attachment; filename=\""+path.getFileName()+"\";"); 
      ServletOutputStream outputStream; 
      outputStream = response.getOutputStream(); 
      byte[] data = Files.readAllBytes(path); 
      outputStream.write(data); 
     } catch (IOException ex) {ex.printStackTrace();} 
    } 
0

我发现基于多部分/格式数据用于我的问题的替代解决方案,用于该服务器应该能够处理多个数据/表单数据。为此,我必须有

private static final MultipartConfigElement MULTI_PART_CONFIG = new MultipartConfigElement(
     System.getProperty("java.io.tmpdir")); 

处理程序

if (request.getContentType() != null 
      && request.getContentType().startsWith("multipart/form-data")) { 
     baseRequest.setAttribute(Request.__MULTIPART_CONFIG_ELEMENT, 
       MULTI_PART_CONFIG); 
    } 

手柄方法 里面我们就可以得到请求中的文件如下

@Override 
public void handle(String target, Request baseRequest, 
     HttpServletRequest request, HttpServletResponse response) 
     throws IOException, ServletException { 
    if (request.getContentType() != null 
      && request.getContentType().startsWith("multipart/form-data")) { 
     baseRequest.setAttribute(Request.__MULTIPART_CONFIG_ELEMENT, 
       MULTI_PART_CONFIG); 
    } 
    // response.setContentType("text/html;charset=utf-8"); 
    response.setStatus(HttpServletResponse.SC_OK); 
    baseRequest.setHandled(true); 


     final FileOutputStream output = new FileOutputStream("D:\\Dir\\"+ request.getParameter("imageName") + ".jpg"); 
     IOUtils.copy(request.getPart("file").getInputStream(), output); 
     output.close(); 


} 

内这里来自apache commons-io jar文件的IOUtils