关于jsp页面文件下载的问题

说好不许笑 2004-09-01 04:55:33
服务器tomcat5.0.16
jsp页面内超链接<a href="***.rar">***</a>
点击超链接的时候不是弹出提示框(打开or保存),而是把rar文件显示成乱码,
不知道如何解决这个问题,还请多帮忙,只要弹出提示框可以保存就可以了,
不想做下载文件的程序了,请多帮忙了!!多谢,多谢!!!
...全文
277 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mycsdnid 2004-09-05
  • 打赏
  • 举报
回复
好像还没有结贴啊
说好不许笑 2004-09-03
  • 打赏
  • 举报
回复
好了,多谢各位了,按你们的方法就很简单了!!!
结贴结贴
悠悠的爸爸 2004-09-01
  • 打赏
  • 举报
回复
package com.ces.jyjl.util.download;

import java.util.List;
import java.util.ArrayList;


public class ResponseContentType {
public static final String TEXT_CSS = "text/css";
public static final String TEXT_HTML = "text/html";
public static final String TEXT_PLAIN = "text/plain";
public static final String TEXT_RICHTEXT = "text/richtext";
public static final String TEXT_RTF = "text/rtf";
public static final String TEXT_SGML = "text/sgml";
public static final String TEXT_XML = "text/xml";

public static final String IMAGE_CGM = "image/cgm";
public static final String IMAGE_GIF = "image/gif";
public static final String IMAGE_JPEG = "image/jpeg";
public static final String IMAGE_PNG = "image/png";
public static final String IMAGE_TIFF = "image/tiff";

public static final String VIDIO_MPEG = "vidio_mpeg";

public static final String MODEL_VRML = "model/vrml";
public static final String MODEL_IGES = "model/iges";
public static final String MODEL_MESH = "model/mesh";

public static final String APPLICATION_OCTET_STREAM = "application/octet-stream";
public static final String APPLICATION_JAVA = "application/java";
public static final String APPLICATION_POSTSCRIPT = "application/postscript";
public static final String APPLICATION_PDF = "application/pdf";
public static final String APPLICATION_ZIP = "application/zip";
public static final String APPLICATION_MSWORD = "application/msword";
public static final String APPLICATION_XML = "application/xml";

private static List resContList = null;
/**
* 功能:对文件类型进行初始化
*/
static void initResContTable(){
if(resContList == null){
resContList = new ArrayList();
resContList.add(TEXT_CSS);
resContList.add(TEXT_HTML);
resContList.add(TEXT_PLAIN);
resContList.add(TEXT_RICHTEXT);
resContList.add(TEXT_RTF);
resContList.add(TEXT_SGML);
resContList.add(TEXT_XML);
resContList.add(IMAGE_CGM);
resContList.add(IMAGE_GIF);
resContList.add(IMAGE_JPEG);
resContList.add(IMAGE_PNG);
resContList.add(IMAGE_TIFF);
resContList.add(VIDIO_MPEG);
resContList.add(MODEL_VRML);
resContList.add(MODEL_IGES);
resContList.add(MODEL_MESH);
resContList.add(APPLICATION_OCTET_STREAM);
resContList.add(APPLICATION_JAVA);
resContList.add(APPLICATION_POSTSCRIPT);
resContList.add(APPLICATION_PDF);
resContList.add(APPLICATION_ZIP);
resContList.add(APPLICATION_MSWORD);
resContList.add(APPLICATION_XML);
}
}

static String getContentType(String fileName){
initResContTable();
String contentType = "application/x-msdownload";
if(fileName.indexOf(".") > -1){
String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
int size = resContList.size();
String contTypeName = "";
fileType = fileType.toLowerCase();
for(int i = 0; i < size; i++){
contTypeName = (String)resContList.get(i);
if(contTypeName.indexOf(fileType) > -1){
contentType = contTypeName;
break;
}
}
}
return contentType;
}
}
悠悠的爸爸 2004-09-01
  • 打赏
  • 举报
回复
自己写了一个下载用的,你试一下。
package com.ces.jyjl.util.download;

import java.io.*;
import java.sql.*;
import java.net.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ces.jyjl.util.*;
import oracle.jdbc.driver.OracleResultSet;
import javax.servlet.ServletOutputStream;
import oracle.sql.BLOB;
import oracle.sql.CLOB;

/**
* <p>Title: 监狱局后勤</p>
* <p>Description: </p>
* <p>Copyright: CES Copyright (c) 2004</p>
* <p>Company: CES</p>
* @author 唐明胜
* @version 1.0
*/

public class WebDownload {
private String contentType = "";
private String headerValue = "";
private String argFilePath = "";
private InputStream inStream = null;
private HttpServletResponse response = null;
private HttpServletRequest request = null;

/**
* 设置response的contentType类型。
* @param contentType 其值可参考ResponseContentType提供的值,
* 如果确切不知道如何设置,可以不用调用该方法,系统会自行辨认。
*/
public void setContentType(String contentType) {
this.contentType = (Tool.isEmpty(contentType)) ? "" : contentType;
}

/**
* 功能:设置头部信息Content-Disposition的值。
* @param headerValue 头部信息Content-Disposition
*/
public void setHeaderValue(String headerValue) {
this.headerValue = (Tool.isEmpty(headerValue)) ? "" : headerValue;
}

/**
* 功能:将数据库中的值显示出来,显示字段由sql语句确定,当有多个字段时,
* 只显示第一个字段的值。
* @param request 请求对象;
* @param response 反馈对象;
* @param sqlStr sql查询语句;
* @param fileName 下载时想要显示给客户端的文件名
* @throws SQLException
*/
public void downLoadFromField(HttpServletRequest request,
HttpServletResponse response, String sqlStr,
String fileName) throws SQLException {
this.request = request;
this.response = response;
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
request.setCharacterEncoding("GBK");
conn = DAOUtil.getDBConnection();
st = conn.createStatement();
rs = st.executeQuery(sqlStr);
ResultSetMetaData rsmd = rs.getMetaData();
String fieldType = rsmd.getColumnTypeName(1).toUpperCase();
String fieldName = rsmd.getColumnName(1);
String checkType = "BLOB;CLOB;LONG;LONG_RAW;NBLOB;NCLOB";
if (rs.next()) {
if (checkType.indexOf(fieldType) > -1) {
if (fieldType.equalsIgnoreCase("BLOB")) {
BLOB blobValue = (BLOB) rs.getObject(1);
inStream = blobValue.getBinaryStream();
} else if (fieldType.equalsIgnoreCase("CLOB")) {
CLOB clobValue = (CLOB) rs.getObject(1);
inStream = clobValue.binaryStreamValue();
}
} else {
inStream = rs.getBinaryStream(1);
}
setResponse(fileName);
download();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DAOUtil.closeDBConnection(conn);
}
}

/**
* 功能:将服务器路径下的文件下载。
* @param request 页面请求对象
* @param response 页面回馈对象
* @param file 要下载的文件
*/
public void downloadFormFile(HttpServletRequest request, HttpServletResponse response, File file){
if(file == null || !file.exists() || file.isDirectory()){
return;
}
this.request = request;
this.response = response;
try {
request.setCharacterEncoding("GBK");
String fileName = file.getName();
inStream = new FileInputStream(file);
setResponse(fileName);
download();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
augustfox 2004-09-01
  • 打赏
  • 举报
回复
apicescn(艾伦)
什么选项啊?
apicescn 2004-09-01
  • 打赏
  • 举报
回复
楼主用的平台是windows的吗?如果是的话,你可修改windows里面的文件夹选项来设置即可恢复下载保存对话框。
xx_ch 2004-09-01
  • 打赏
  • 举报
回复
另借你的地方问下我前2天问的问题,还没有解决

我使用jspsmartupload进行文件的上传和下载
在完全按照网上的例子来写的
下载页面如下
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="com.jspsmart.upload.*" %>
<%
// 新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 初始化
su.initialize(pageContext);
// 设定contentDisposition为null以禁止浏览器自动打开文件,
//保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
//doc时,浏览器将自动用word打开它。扩展名为pdf时,
//浏览器将用acrobat打开。
su.setContentDisposition(null);
// 下载文件
su.downloadFile("/upload/aa.txt");
%>

我直接在页面写下载代码也出同样的错误,代码如下:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="java.io.*" %>
<%
String fileName = "aa.txt".toString();
//读到流中
InputStream inStream=new FileInputStream("/upload/aa.txt");
//设置输出的格式
response.reset();
response.setContentType("bin");
response.addHeader("Content-Disposition","attachment; filename=" + fileName );
//循环取出流中的数据
byte[] b = new byte[100];
int len;
while((len=inStream.read(b)) >0)
response.getOutputStream().write(b,0,len);
inStream.close();
%>

大家帮我看看,谢谢

运行以后报错
java.lang.IllegalStateException: getOutputStream() has already been called for this response
xx_ch 2004-09-01
  • 打赏
  • 举报
回复
不想做下载文件的程序了,那你声明下载请用右键另存文件好了

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧