JavaWeb——Day15_2

*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.过滤器_权限过滤器

讲一下昨天的过滤器的知识。



真正开发的时候是用数据库的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值