2012-07-25 2 views
1

org.apache.wicket.util.resource.IResourceStream 사용하기 서버에서 zip 파일을 만들고 outputstream에서 동일한 zip 파일을 작성했습니다. 그러나 그것은 내가 머리를 부러 뜨리는 다음과 같은 오류를 던집니다. 어떠한 제안?org.apache.wicket.util.resource.IResourceStream이 자바 스크립트 오류를 ​​발생시킵니다. 파일을 다운로드 할 수 없습니다.

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

자바 코드

 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

당신은 대신 바이너리 데이터를 전송하고 (브라우저에서 JS 코드가 예상하는) XML을 다시 전송하는 AJAX 요청을하고 있어요. 그것이 "잘 형성되지 않은"오류를 얻는 이유입니다. 올바른 형식의 XML이 아닙니다.

이 작업을 수행하는 데는 두 가지 방법이 있습니다. 하나는 AJAX를 제출하지 않고 AjaxButton 대신 일반 Button을 사용하는 것입니다. 나는 이것을 추천한다. https://cwiki.apache.org/WICKET/ajax-update-and-file-download-in-one-blow.html

:

당신이 다운로드를 제공하고자 다음 다른 AJAX 작업 (즉, 같은 패널 또는 무언가를 업데이트)을 수행하고 필요한 경우

이를 보라
관련 문제