java - org.apache.wicket.util.resource.IResourceStream 抛出 javascript 错误。不能下载文件

标签 java javascript jakarta-ee wicket wicket-1.5

我使用 org.apache.wicket.util.resource.IResourceStream 在服务器上创建了 zip 文件,并在输出流中写入了相同的 zip 文件。但它引发了以下错误,我正在打破我的头脑。有什么建议吗?

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)
{
}
}

最佳答案

您正在执行 AJAX 请求,但您没有发送回 XML(浏览器中的 JS 代码需要)而是发送二进制数据。这就是您收到“格式不正确”错误的原因 - 它不是格式正确的 xml。

有两种方法可以完成这项工作。一种是简单地不执行 AJAX 提交并使用常规 Button 而不是 AjaxButton。我推荐这个。

如果您需要做一些其他的 AJAX 工作(更新面板或类似的东西)然后想要展示下载,请看这个:https://cwiki.apache.org/WICKET/ajax-update-and-file-download-in-one-blow.html

关于java - org.apache.wicket.util.resource.IResourceStream 抛出 javascript 错误。不能下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11647090/

相关文章:

javascript - 如何在使用 Apple pencil 时从 HTML canvas 绘制或获取指针坐标?

javascript - 组织 JavaScript/jQuery - 替代使用 jQuery 的实时连接

java - 用户定义的 Eclipse 格式化程序

java - Hibernate 单向一对多。我有点困惑

java - CDI - 正确的 bean.xml 格式是什么?

Java 没有读取我在用户修改后传递给它的变量

c# - Request.UrlReferrer 在 IE8 中不工作,在 IE9 中工作正常

java - 使用 Tomcat,Google Chrome 无法打开 localhost :8080 but Safari can

java - Spring:发布请求未到达 Controller 类

Java 泛型 : what does <? extends Interface <?>> 是什么意思?