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