无论如何要使AdobeAir应用程序在下载完成之前保持套接字打开?

zbdgwd5y  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(147)

我正在创建adobeair应用程序作为web浏览器来显示flex应用程序,因为今年年底任何浏览器都不再支持flash。
但是在flex应用程序中有一个文件下载函数,它是使用actionform调用的,比如下面的url
http://localhost:8080/项目/操作/创建
然后文件将被写入 ResponseOutputStream 就像下面的代码。

public void download(Inputstream in, HttpServletResponse response) throws IOException
{
    OutputStream out = null;
    try
    {
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment; filename=\"dummy.pdf\"");
        out = response.getOutputStream();
        int len = 0;
        byte[] buffer = new byte[1024];
        while((len = in.read(buffer,0,1024)) != -1) { out.write(buffer,0, len); }
    } 
    catch (SocketException e)
    { ...

如果我使用任何浏览器下载文件都没有问题,但是如果我使用air应用程序下载,就会发现这个异常。
java.net.socketexception:软件导致连接中止:java.net.socketoutputstream.socketwrite0(本机方法)处的java.net.socketoutputstream.socketwrite0(socketoutputstream)处的套接字写入错误。java:113)在java.net.socketoutputstream.write(socketoutputstream。java:159)在org.apache.coyote.http11.internaloutputbuffer.realwritebytes(internaloutputbuffer。java:741)在org.apache.tomcat.util.buf.bytechunk.flushbuffer(bytechunk。java:432)在org.apache.tomcat.util.buf.bytechunk.append(bytechunk。java:347)在org.apache.coyote.http11.internaloutputbuffer$outputstreamoutputbuffer.dowrite(internaloutputbuffer。java:765)在org.apache.coyote.http11.filters.chunkedoutputfilter.dowrite(chunkedoutputfilter。java:126)在org.apache.coyote.http11.internaloutputbuffer.dowrite(internaloutputbuffer。java:574)在org.apache.coyote.response.dowrite(response。java:560)在org.apache.catalina.connector.outputbuffer.realwritebytes(outputbuffer。java:353)在org.apache.tomcat.util.buf.bytechunk.flushbuffer(bytechunk。java:432)在org.apache.tomcat.util.buf.bytechunk.append(bytechunk。java:347)在org.apache.catalina.connector.outputbuffer.writebytes(outputbuffer。java:381)在org.apache.catalina.connector.outputbuffer.write(outputbuffer。java:370)在org.apache.catalina.connector.coyoteoutputstream.write(coyoteoutputstream。java:89)
问题:
我认为在调用/action/create url之后,air应用程序关闭了套接字,因此responseoutputstream将无法连接到套接字。
在收到响应之前,是否有任何方法保持air应用程序打开其套接字?我试图保持flex应用程序代码不变,这是我第一次使用air创建应用程序。或者,如果插座不是真正的原因,是否有任何我可以发回这个回应空气应用程序?
谢谢你提前回答。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题