Topic: 问一个文件下载的问题 |
Print this page |
1.问一个文件下载的问题 | Copy to clipboard |
Posted by: lxh_ming Posted on: 2004-07-12 16:17 我在jsp里加了下载文件的代码,但是下载完文件后,点击叶面的其它部分,执行其中的js代码,就抱找不到对象的错误。 我开始以为是重定向造成repuest流的转向造成的,后面改成了,servlet也是同样的错误,后面有改成了jsp smatrupload来做,也是同样的错误。 jdk:1.3.2,tomcat:3.1.2 麻烦各位帮忙分析一下原因了 |
2.Re:问一个文件下载的问题 [Re: lxh_ming] | Copy to clipboard |
Posted by: lxh_ming Posted on: 2004-07-12 16:29 2004-07-12 04:18:44 - Ctx( /BroadMAN ): IllegalStateException in: R( /BroadMAN + /bankfile/BankFileCreateForm.jsp + null) OutputStream is already being used for this request 后台是这样的错误 |
3.Re:问一个文件下载的问题 [Re: lxh_ming] | Copy to clipboard |
Posted by: popwave Posted on: 2004-07-13 13:34 你下载的时候用的是ServletResponse.getOutputStream() ,而Tomcat用的是ServletResponse.getWriter(),这两个方法是不能同时调用的.所以下载文件时候也使用getWriter(),就不会报错了. |
4.Re:问一个文件下载的问题 [Re: popwave] | Copy to clipboard |
Posted by: lxh_ming Posted on: 2004-07-13 15:35 好像还是不行,我改成了用 response.reset(); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\""); response.addHeader("Cache-Control", "no-cache,must-revalidate"); response.addHeader("Pragma", "no-cache"); PrintWriter mynewout = response.getWriter(); mynewout.write( new String( buff ) ); mynewout.flush(); mynewout.close(); 以前是用 ServletOutputStream myout = response.getOutputStream(); myout.write(buff); myout.flush(); myout.close(); |
5.Re:问一个文件下载的问题 [Re: lxh_ming] | Copy to clipboard |
Posted by: popwave Posted on: 2004-07-13 15:55 现在是什么情况呢?报什么错呢? 我用的是 mynewout.print(new String(buff)); mynewout.close(); 你试试看 |
6.Re:问一个文件下载的问题 [Re: lxh_ming] | Copy to clipboard |
Posted by: lxh_ming Posted on: 2004-07-13 16:09 2004-07-13 04:21:48 - Ctx( /BroadMAN ): IOException in: R( /BroadMAN + /include/ validator.js + null) Connection aborted by peer: socket write error 叶面上显示的错误信息是: 行:186 字符:7 拒绝访问 行186里有一个js代码, function upload(){ document.form1.fileNameList.value = ""; document.form1.OperWay.value = "BUILD"; document.form1.submit(); } |
7.Re:问一个文件下载的问题 [Re: lxh_ming] | Copy to clipboard |
Posted by: popwave Posted on: 2004-07-13 16:31 JAVA代码应该是没有问题的,我试过了,是可以的.还是先检查一下JSP吧,先把DOWLOAD的功能去掉试试看.不过本来用getOutputStream,JSP没错吗?应该也一样的阿. |
8.Re:问一个文件下载的问题 [Re: lxh_ming] | Copy to clipboard |
Posted by: lxh_ming Posted on: 2004-07-13 16:38 是这样的问题,我的页面上有一个生成文件的按钮,还有一个文件列表,点击文件列表后的连接,就可以下载文件了。 如果直接点击生成文件按钮,可以正常的生成文件,但是如果先下载了文件,在点击生成文件按钮,就会抱错,但是多次下载文件也不会有错。 jsp里的代码就是这样的(都是老代码,所以直接写jsp的,比较乱) 其中的OperWay就是表示下载还是生成文件 代码如下: if((request.getMethod().equals("POST"))){ if ( OperWay == null || OperWay.equals( "" ) ) return; if ( OperWay.equals( "DOWN" ) ) { if ( fileNameList != null && !fileNameList.equals( "" ) ) { System.out.println( "fileNameList === " + fileNameList ); FileInputStream fis = new FileInputStream( fileDir + File.separator + fileNameList ); byte[] buff = new byte[fis.available()]; fis.read(buff); fileName = toUtf8String( fileNameList ); //, "UTF-8" response.reset(); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\""); response.addHeader("Cache-Control", "no-cache,must-revalidate"); response.addHeader("Pragma", "no-cache"); PrintWriter mynewout = response.getWriter(); mynewout.write( new String( buff ) ); mynewout.close(); return; } } else if ( OperWay.equals( "BUILD" ) ) { String bankCode = ""; String bankName = ""; if ( bankPara.equals( "0" ) ){ bankPara = ""; int size = vBank.size() - 1; for ( int i = 0; i <= size; i++ ) { Bank bank = ( Bank )vBank.get( i ); if ( cityPara.equals( bank.city ) ) { bankCode += bank.fi_code; bankCode += ","; bankName += bank.description; bankName += ","; } } if ( bankCode.endsWith( "," ) ) bankCode = bankCode.substring( 0, bankCode.length() - 1 ); if ( bankName.endsWith( "," ) ) bankName = bankName.substring( 0, bankName.length() - 1 ); } else { bankCode = bankPara; int size = vBank.size() - 1; for ( int i = 0; i <= size; i++ ) { Bank bank = ( Bank )vBank.get( i ); if ( bank.fi_code.equals( bankCode ) ) bankName = bank.description; } } BatchGenerate generate = BatchGenerate.getInstance(); System.out.println( "bankCode=" + bankCode ); System.out.println( "bankName=" + bankName ); System.out.println( "Integer.parseInt( creditabilityPara )=" + Integer.parseInt( creditabilityPara ) ); resultCode = generate.generateBankFile( cyclePara, bankCode, bankName, Integer.parseInt( creditabilityPara ) ); if ( resultCode != 0 ) { errorMsg = generate.getErrMsg(); } else newFileName = generate.getFileName(); } } |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |