jsp中实现文件下载的最简单的方式是在网页上做超级链接,如:<a href="music/abc.mp3">点击下载</a>。
但是这样服务器上的目录资源会直接暴露给最终用户,会给网站带来一些不安全的因素。因此可以采用其它方式实现下载,可以采用:1、RequestDispatcher的方式进行;2、采用文件流输出的方式下载。
头文件设置
response.setContentType("application/文档类型") //文档类型包括:mstxt,msword,pdf
//contentType可设置的类型有
<option value="image/bmp">BMP</option>
<option value="image/gif">GIF</option>
<option value="image/jpeg">JPEG</option>
<option value="image/tiff">TIFF</option>
<option value="image/x-dcx">DCX</option>
<option value="image/x-pcx">PCX</option>
<option value="text/html">HTML</option>
<option value="text/plain">TXT</option>
<option value="text/xml">XML</option>
<option value="application/afp">AFP</option>
<option value="application/pdf">PDF</option>
<option value="application/rtf">RTF</option>
<option value="application/msword">MSWORD</option>
<option value="application/vnd.ms-excel">MSEXCEL</option>
<option value="application/vnd.ms-powerpoint">MSPOWERPOINT</option>
<option value="application/wordperfect5.1">WORDPERFECT</option>
<option value="application/vnd.lotus-wordpro">WORDPRO</option>
<option value="application/vnd.visio">VISIO</option>
<option value="application/vnd.framemaker">FRAMEMAKER</option>
<option value="application/vnd.lotus-1-2-3">LOTUS123</option>
response.setHeader("Content-Disposition", "attachment; filename="+要显示在客户端的文件名称);
输出流设置
//获取输出流
OutputStream output = response.getOutputStream();
//从file中创建一个输入流 file为文件的物理路径
InputStream fileIn = new FileInputStream(file);
//输入缓冲流
BufferedInputStream bis=new BufferedInputStream(fileIn);
//输出缓冲流
BufferedOutputStream bos=new BufferedOutputStream(output);
//缓冲字节数
byte data[]=new byte[4096];
int size=0;
size=bis.read(data);
//读取并输出文件
while (size!=-1){
bos.write(data,0,size);
size=bis.read(data);
}
bis.close();
//清空输出缓冲流
bos.flush();
bos.close();
output.close();