Javaweb|文件下载
学习web的同学,都知道掌握文件的上传与下载是非常重要的一步。也都习惯了先学习如何上传文件,再进一步了解如何下载文件。
但今天我们反其道而行之,就先来看看如何在网页中实现下载文件。点击下载按钮,就可以把对应资源下载下来。
该方法未进行安全防护与验证,限于新手入门学习掌握。文件的上传尝试过很多种,原生的,基于框架的,自己封装的,后面一一分享。今天就先来看看如何实现下载,在我看来,下载是比较简单的。
首先:你要知道你的文件保存在服务器的位置。(这个地方的路径也是以后上传文件需要注意的地方)没有云服务器没事,你要知道你的tomcat运行起来,项目发布在了哪儿?
默认在你的eclipse安装目录下,
.metadata.pluginsorg.eclipse.wst.server.coretmp0(或者是tmp1)wtpwebapps你的项目。可自己修改;
点开servers后 修改:
前台:通过超链接下载
代码语言:javascript复制<a href="${pageContext.request.contextPath}/items/download.action?fileurl=0-material.zip">
下载
</a>
fileurl的值是要下载的文件的名字,有了数据库,可以设置成可变的。
后台:Conteoller
代码语言:javascript复制/**
* 下载文件
* @param fileurl
* @param session
* @param response
* @throws IOException
*/
@RequestMapping("/download")
public void getFile(String fileurl, HttpSession session, HttpServletResponse response)throws IOException {
String basePath = session.getServletContext().getRealPath("/"); // 获取基本路径
if (null!=fileurl && !fileurl.equals("")) {
/* 第一步:根据文件路径获取文件 */
File file = new File(basePath "\images\" fileurl);
if (file.exists()) { // 文件存在
/* 第二步:根据已存在的文件,创建文件输入流 */
InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
/* 第三步:创建缓冲区,大小为流的最大字符数 */
byte[] buffer = new byte[inputStream.available()]; // int available() 返回值为流中尚未读取的字节的数量
/* 第四步:从文件输入流读字节流到缓冲区 */
inputStream.read(buffer);
/* 第五步: 关闭输入流 */
inputStream.close();
String fileName = file.getName();// 获取文件名
response.reset();
response.addHeader("Content-Disposition","attachment;filename=" new String(fileName.getBytes("utf-8"), "iso8859-1"));
response.addHeader("Content-Length", "" file.length());
/* 第六步:创建文件输出流 */
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
/* 第七步:把缓冲区的内容写入文件输出流 */
outputStream.write(buffer);
/* 第八步:刷空输出流,并输出所有被缓存的字节 */
outputStream.flush();
/* 第九步:关闭输出流 */
outputStream.close();
}else{
return;
}
}
}
使用文件流的方式将文件下载到本地。
第一步中:
basePath "\images\" fileurl 就是完整的tomat服务器下的文件的路径与名字
需要下载的0-material在这个路径下。
此时,启动项目,在页面上,点击下载,即可下载到本地。