java后台实现下载图片等,用io很容易实现,不太容易出现乱码,但是通过http响应,在浏览器上下载到用户的客户端,用out下载的话,报头设置不对很容易出现乱码;
下载其他文件都是类似;
压缩包下载
<%@ page language="java"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.net.*"%>
<%
String fileName = request.getParameter("filename");
response.setHeader("Content-Type", "application/zip");
response.setHeader("Content-disposition",
"attachment; filename="+fileName+".zip");
java.io.FileInputStream fileInputStream = new java.io.FileInputStream(
request.getRealPath("/tempimg/"+fileName+".zip"));
int i;
while ((i = fileInputStream.read()) != -1) {
out.write(i);
}
fileInputStream.close();
%>
excel下载
<%@ page language="java"%>
<%@ page contentType="application/msexcel;charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.net.*"%>
<%@ page import="java.io.*"%>
<%
request.setCharacterEncoding("utf-8");
String filename = request.getParameter("filename");
filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");
System.out.println(filename);
OutputStream o=response.getOutputStream();
byte b[]=new byte[500];
/** * 得到文件的当前路径 * @param args */
//String serverpath=request.getRealPath("\\");
File fileLoad=new File(request.getRealPath("/tempimg/"+filename+".xls"));
response.setContentType("application/octet-stream");
<span style="background-color: rgb(255, 255, 51);">//application/vnd.ms-excel也可以,参考</span><a target=_blank href="http://tool.oschina.net/commons"><span style="background-color: rgb(255, 255, 51);">http://tool.oschina.net/commons</span></a><span style="background-color: rgb(255, 255, 51);">(HTTP Content-type对照表)</span>
response.setHeader("content-disposition","attachment; filename="+filename+".xls");
<span style="background-color: rgb(255, 255, 51);">//提示下载,如果把filename去掉,也会正常下载,仅仅是指定默认保存的文件名;但是content-disposition不能缺少</span>
long fileLength=fileLoad.length();
String length1=String.valueOf(fileLength);
response.setHeader("Content_Length",length1);
FileInputStream in=new FileInputStream(fileLoad);
int n;
while((n=in.read(b))!=-1){
o.write(b,0,n);
}
System.out.println("wanleewan");
in.close();
out.clear();
<span style="color:#ff0000;background-color: rgb(255, 255, 51);">out = pageContext.pushBody();
</span>
<span style="color:#ff0000;background-color: rgb(255, 255, 51);">//不加有时候会报错</span>
/* //输入流
java.io.FileInputStream fileInputStream = new java.io.FileInputStream(
request.getRealPath("/tempimg/"+fileName+".xls"));
FileOutputStream fileOutputStream = new FileOutputStream("G:\\log.xls",true);
int i;
while ((i = fileInputStream.read()) != -1) {
//out.write(i);
fileOutputStream.write(i);
}
System.out.println("输出完了");
fileOutputStream.close();
fileInputStream.close(); */
//不行!!!还是用字节流可行
/* //输入流
FileReader reader=new FileReader(request.getRealPath("/tempimg/"+fileName+".xls"));
PrintWriter writer=new PrintWriter("G:\\log2.xls");
int i;
while ((i = reader.read()) != -1) {
//out.write(i);
writer.write(i);
}
System.out.println("输出完了");
reader.close();
writer.close(); */
%>