2012-07-25 50 views
1

使用org.apache.wicket.util.resource.IResourceStream我在服務器和outputstream中創建了zip文件,寫入了相同的zip文件。但它引發了我打破我的頭的以下錯誤。任何建議?org.apache.wicket.util.resource.IResourceStream拋出javascript錯誤。無法下載文件

Timestamp: 7/25/2012 3:13:28 PM 
Error: not well-formed 
Source File: XXX 
Line: 1, Column: 3 
Source Code: 
PK 

Java代碼的

 AjaxButton one = new AjaxButton("one"){  
       @Override 
       public void onSubmit(AjaxRequestTarget target,Form form) { 
        // TODO Auto-generated method stub 
        try { 

         { 
         IResourceStream iResourceStream = null; 
         iResourceStream = new AbstractResourceStreamWriter(){ 

          @Override 
          public String getContentType() { 
           // TODO Auto-generated method stub 
           return "application/zip"; 
          } 

          @Override 
          public void write(OutputStream output) { 
           // TODO Auto-generated method stub 
           File tmpFile = null; 
           String batchFileName = "batch_"+dateFormat.format(new Date())".zip"; 
           File zipFile = new File(batchFileName); 
           FileOutputStream zipFileOutputStream = null; 
           ZipOutputStream zipOutputStream = null; 
           try 
           { 
            zipFileOutputStream = new FileOutputStream(zipFile); 
            zipOutputStream = 
             new ZipOutputStream(zipFileOutputStream);  
            zipOutputStream.setLevel(Deflater.DEFAULT_COMPRESSION); 
            for(XXX) 
            { 
// create tmpFile zip file here         
                ZipEntry zipAdd = new ZipEntry(tmpFile.getName()); 
                System.out 
                  .println(tmpFile.getName()); 
                zipOutputStream.putNextEntry(zipAdd); 
                zipOutputStream.write(IOUtils.toByteArray(new FileInputStream(tmpFile))); 
                zipOutputStream.closeEntry(); 
               } 
              } 
             } 
            } 

           } 
           catch (Exception e) { 
            // TODO: handle exception 
            e.printStackTrace(); 
           } 
           finally 
           { 
            if(zipOutputStream != null){ 
             try { 
              zipOutputStream.flush(); 
              zipOutputStream.close(); 
             } catch (IOException e) {     
              e.printStackTrace(); 
             } 
            } 

            if(zipFileOutputStream != null){ 
             try { 
              zipFileOutputStream.flush(); 
              zipFileOutputStream.close(); 
             } catch (IOException e) {     
              e.printStackTrace(); 
             } 
            } 
            try 
            { 
             { 
              InputStream in = new FileInputStream(zipFile); 
              byte[] buf = new byte[1024]; 
              int len; 
              while ((len = in.read(buf)) > 0){ 
               output.write(buf, 0, len); 
              } 
              in.close(); 
              output.close(); 
             } 
            } 
            catch (Exception e) { 
             // TODO: handle exception 
             e.printStackTrace(); 
            } 
           } 


          } 

         }; 

         getRequestCycle() 
         .setRequestTarget(new ResourceStreamRequestTarget(iResourceStream) 
         .setFileName("batch.zip")); 


        } else { 

        } 

       } catch (Exception e) 
{ 
} 
} 

回答

2

你做一個AJAX請求,但不是發回XML(在瀏覽器中的JS代碼期望)要發送的二進制數據。這就是爲什麼你會得到「格式不正確」的錯誤 - 它不是格式良好的XML。

有兩種方法可以完成這項工作。一個是簡單地不做AJAX提交併使用常規的Button而不是AjaxButton。我推薦這個。

如果你需要做一些其他工作AJAX(更新面板或類似的東西),然後想現在下載,看看這個:https://cwiki.apache.org/WICKET/ajax-update-and-file-download-in-one-blow.html