Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 下载PDF文件-套接字错误_Java_File_Download - Fatal编程技术网

Java 下载PDF文件-套接字错误

Java 下载PDF文件-套接字错误,java,file,download,Java,File,Download,我有一个小问题,我有这个方法下载两种格式的文件(.Txt和.PDF) 在中查找文件。我没有问题 但对于PDF文件,当我取消下载或他打开下载窗口而我不采取任何行动时,代码给出了以下例外情况: 等待用户操作的时间: java.net.SocketException: Socket closed at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:99) at java.net.SocketOutputStream.wr

我有一个小问题,我有这个方法下载两种格式的文件(.Txt和.PDF)

在中查找文件。我没有问题

但对于PDF文件,当我取消下载或他打开下载窗口而我不采取任何行动时,代码给出了以下例外情况:

等待用户操作的时间:

java.net.SocketException: Socket closed
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:99)
at java.net.SocketOutputStream.write(SocketOutputStream.java:137)
at weblogic.servlet.internal.ChunkOutput.writeChunkTransfer(ChunkOutput.java:578)
at weblogic.servlet.internal.ChunkOutput.writeChunks(ChunkOutput.java:548)
at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:436)
at weblogic.servlet.internal.ChunkOutput$2.checkForFlush(ChunkOutput.java:657)
at weblogic.servlet.internal.ChunkOutput.write(ChunkOutput.java:342)
at weblogic.servlet.internal.ChunkOutputWrapper.write(ChunkOutputWrapper.java:148)
at weblogic.servlet.internal.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:151)
at java.io.OutputStream.write(OutputStream.java:59)
at FIRST.handlers.FRC.downloadFile(FRC.java:752)
at FIRST.handlers.FRC.handleDownloadPDFItem(FRC.java:638)
at FIRST.handlers.FRC.handleRequest(FRC.java:368)
at FIRST.FIRSTApplication.serviceRequest(FIRSTApplication.java:47)
at FIRST.FIRSTONLINE.service(FIRSTONLINE.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:845)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:216)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:132)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:352)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:236)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3284)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2091)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1512)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
当用户取消下载文件时:

java.net.SocketException: socket write error: Connection reset by peer.
at jrockit.net.SocketNativeIO.writeBytesPinned(Native Method)
at jrockit.net.SocketNativeIO.socketWrite(SocketNativeIO.java:46)
at java.net.SocketOutputStream.socketWrite0(SocketOutputStream.java)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at weblogic.servlet.internal.ChunkOutput.writeChunkTransfer(ChunkOutput.java:577)
at weblogic.servlet.internal.ChunkOutput.writeChunks(ChunkOutput.java:548)
at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:436)
at weblogic.servlet.internal.ChunkOutput$2.checkForFlush(ChunkOutput.java:657)
at weblogic.servlet.internal.ChunkOutput.write(ChunkOutput.java:342)
at weblogic.servlet.internal.ChunkOutputWrapper.write(ChunkOutputWrapper.java:148)
at weblogic.servlet.internal.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:151)
at java.io.OutputStream.write(OutputStream.java:58)
at FIRST.handlers.FRC.downloadFile(FRC.java:752)
at FIRST.handlers.FRC.handleDownloadPDFItem(FRC.java:638)
at FIRST.handlers.FRC.handleRequest(FRC.java:368)
at FIRST.FIRSTApplication.serviceRequest(FIRSTApplication.java:47)
at FIRST.FIRSTONLINE.service(FIRSTONLINE.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:844)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:216)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:132)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:352)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:235)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3284)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2089)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1512)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
这是我的方法:

private String downloadFile(String fileName, String name, String format) {
    String result = null;
    HttpServletResponse response = getHttpServletResponse();
    if (response != null) {

        if (format != null && format.contains(PDF_EXTENSION.getExtension())) {
            response.setContentType("application/pdf"); 
        } else {
            response.setContentType("application/text");
        }
        response.addHeader("Content-disposition", "attachment; filename=" + name);

        FileInputStream fs = null;
        try {
            OutputStream os = response.getOutputStream();
            fs = new FileInputStream(fileName);
            byte[] b = new byte[8192];
            byte[] crlf = { 0x0d, 0x0a };
            int size = 0;

            while ((size = fs.read(b)) != -1) {
                if (format == null) {
                    for (int i = 0; i < size; i++) {
                        if (b[i] == 0x0a) {
                            os.write(crlf);
                        } else {
                            os.write(b, i, 1);
                        }
                    }
                } else {
                    os.write(b);
                }
            }
            out.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (fs != null) {
                    fs.close();
                }

                if(isPDFFile(fileName)) {
                    deletePDFFileTemporary(fileName);
                }
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        result = "application/text";
    }
    return result;
}
私有字符串下载文件(字符串文件名、字符串名称、字符串格式){
字符串结果=null;
HttpServletResponse=getHttpServletResponse();
if(响应!=null){
if(format!=null&&format.contains(PDF\u EXTENSION.getExtension()){
response.setContentType(“application/pdf”);
}否则{
response.setContentType(“应用程序/文本”);
}
response.addHeader(“内容处置”、“附件;文件名=“+name”);
FileInputStream fs=null;
试一试{
OutputStream os=response.getOutputStream();
fs=新文件输入流(文件名);
字节[]b=新字节[8192];
字节[]crlf={0x0d,0x0a};
int size=0;
而((大小=fs.read(b))!=-1){
if(格式==null){
对于(int i=0;i

谢谢你的帮助。谢谢你

os.flush()
out.flush()我忘了对此进行注释。flush()是OutputStream上的另一个结构。这个错误总是发生在}else{os.write(b);}中。今天我进行了一些进一步的分析,发现这个错误只发生在InternetExplorer8上的Chrome中。它可能是连接到响应头的东西吗?您是否在客户端上使用jquery?不,我只使用html,错误发生在.write方法中