1、遇到要把查询的数据通过浏览器下载。
在服务器端把数据转换成输出流,写入到response,以response把文件带到浏览器,由浏览器来提示用户是否愿意保存文件到本地。(示例如下)
/**
* 写text文件
* @param response
* @param modelfile
* @param titlename
* @param beginrow
* @param begincol
* @param values
*/
public static void writeText(HttpServletResponse response,String modelfile,String titlename,int beginrow,int begincol, Vector values) {
if(values == null) return;
try {
StringBuffer strBuffer=new StringBuffer();
for(int row=0; row<values.size(); row++){
Vector colvalues = (Vector)values.elementAt(row);
if(colvalues != null){
for(int col=0;col<colvalues.size();col++){
Object colvalue = colvalues.elementAt(col);
if(colvalue != null){strBuffer.append(colvalue.toString()+" ");}
}
strBuffer.append("\n");
}
}
response.setContentType("application/ms-text");
response.setHeader("Content-Disposition",
"attachment;filename=" +
new String( (titlename + ".txt").getBytes(), "iso-8859-1"));
OutputStream outputStream = response.getOutputStream();
byte[] buffer= strBuffer.toString().getBytes();
outputStream.write(buffer);
outputStream.flush();
outputStream.close();
outputStream = null;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2、把服务器中的文件下载,不暴露文件地址,主要是为了控制权限。
在服务器端把文件转换成输出流,写入到response,以response把文件带到浏览器,由浏览器来提示用户是否愿意保存文件到本地。(示例如下)
<%
response.setContentType(fileminitype);
response.setHeader("Location",filename);
response.setHeader("Cache-Control", "max-age=" + cacheTime);
//filename应该是编码后的(utf-8)
response.setHeader("Content-Disposition", "attachment; filename=" + filename);
response.setContentLength(filelength);
OutputStream outputStream = response.getOutputStream();
InputStream inputStream = new FileInputStream(filepath);
byte[] buffer = new byte[1024];
int i = -1;
while ((i = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, i);
}
outputStream.flush();
outputStream.close();
inputStream.close();
outputStream = null;
%>