*6文件下载_综合案例综合网盘
利用程序下载:
二、文件下载
response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename,"utf-8"));
response.setContentType(this.getServletContext().getMimeType(filename));//MIME类型
index.jsp --- 提供 上传 下载列表
upload.jsp --- 提供上传表单,允许用户选择文件进行上传
UploadServlet --- 保存上传的文件到服务器/在数据库中保存文件相关的信息
DownListServlet --- 查询数据库表找到所有可供下载的资源信息,存入request域后带到页面显示
downlist.jsp --- 遍历request中所有资源信息,提供下载连接
DownServlet --- 下载指定id的资源
create database day15;
use day15;
create table netdisk(
id int primary key auto_increment,
uuidname varchar(255),
realname varchar(255),
savepath varchar(255),
ip varchar(100),
uploadtime timestamp,
description varchar(255)
);
1.javabean
2.index
3.upload.jsp
*7.综合案例_网盘
3.uploadservlet
package com.itheima.web;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.itheima.domain.Resource;
import com.itheima.util.DaoUtils;
import com.itheima.util.IOUtils;
public class UploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
//1.上传文件
String upload = this.getServletContext().getRealPath("WEB-INF/upload");
String temp = this.getServletContext().getRealPath("WEB-INF/temp");
Map pmap = new HashMap();
pmap.put("ip", request.getRemoteAddr());
//--创建工厂设置内存缓冲区的大小和临时文件夹的位置
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024*100);
factory.setRepository(new File(temp));
//--获取文件上传核心类,解决文件名乱码/设置文件大小限制
ServletFileUpload fileUpload = new ServletFileUpload(factory);
fileUpload.setHeaderEncoding("utf-8");
fileUpload.setFileSizeMax(1024*1024*100);
fileUpload.setSizeMax(1024*1024*200);
//--检查是否是正确的文件上传表单
if(!fileUpload.isMultipartContent(request)){
throw new RuntimeException("请使用正确的表单进行上传!");
}
//--解析request
List<FileItem> list = fileUpload.parseRequest(request);
//--遍历list,获取FileItem进行解析
for(FileItem item : list){
if(item.isFormField()){//普通字段项
String name = item.getFieldName();
String value = item.getString("utf-8");
pmap.put(name, value);
}else{//文件上传
//--uuidname防止文件名重复
String realname = item.getName();
String uuidname = UUID.randomUUID().toString()+"_"+realname;
pmap.put("realname", realname);
pmap.put("uuidname", uuidname);
//--获取输入流
InputStream in = item.getInputStream();
//--分目录存储防止一个文件夹中文件过多
String hash = Integer.toHexString(uuidname.hashCode());
String savepath = "/WEB-INF/upload";
for(char c : hash.toCharArray()){
upload+="/"+c;
savepath+="/"+c;
}
new File(upload).mkdirs();
pmap.put("savepath", savepath);
//--获取输出流
OutputStream out = new FileOutputStream(new File(upload,uuidname));
//--流对接上传
IOUtils.In2Out(in, out);
IOUtils.close(in, out);
//--删除临时文件
item.delete();
}
}
//2.向数据库中插入数据
Resource r = new Resource();
BeanUtils.populate(r, pmap);
String sql ="insert into netdisk values(null,?,?,?,?,null,?)";
QueryRunner runner = new QueryRunner(DaoUtils.getSource());
runner.update(sql,r.getUuidname(),r.getRealname(),r.getSavepath(),r.getIp(),r.getDescription());
//3.重定向回主页
response.sendRedirect(request.getContextPath()+"/index.jsp");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
4.downlistservlet
5.downlist.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<h1>下载列表</h1><hr>
<c:forEach items="${requestScope.list}" var="r">
<h2>文件名:${r.realname }<br></h2>
上传时间:${r.uploadtime }<br>
上传者ip:${r.ip }<br>
描述信息:${r.description }<br>
<a href="${pageContext.request.contextPath }/servlet/DownServlet?id=${r.id }">下载</a>
<hr>
</c:forEach>
</body>
</html>
6.downservlet:
package com.itheima.web;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import com.itheima.domain.Resource;
import com.itheima.util.DaoUtils;
import com.itheima.util.IOUtils;
public class DownServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//1.获取要下载的资源id
String id = request.getParameter("id");
//2.根据id查找资源
Resource r = null;
try {
String sql = "select * from netdisk where id = ?";
QueryRunner runner = new QueryRunner(DaoUtils.getSource());
r = runner.query(sql, new BeanHandler<Resource>(Resource.class), id);
} catch (SQLException e) {
e.printStackTrace();
}
if(r==null){
//3.如果资源不存在提示
response.getWriter().write("找不到该资源!!!");
return;
}else{
//4.如果存在提供下载
response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(r.getRealname(),"UTF-8"));
response.setContentType(this.getServletContext().getMimeType(r.getRealname()));
String filePath = this.getServletContext().getRealPath(r.getSavepath()+"/"+r.getUuidname());
InputStream in = new FileInputStream(filePath);
OutputStream out = response.getOutputStream();
IOUtils.In2Out(in, out);
IOUtils.close(in, null);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
*8.过滤器_权限过滤器
讲一下昨天的过滤器的知识。
真正开发的时候是用数据库的。