构建数据库filetest:包含文件名称及路径
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for file
-- ----------------------------
DROP TABLE IF EXISTS `file`;
CREATE TABLE `file` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`filename` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`filepath` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of file
-- ----------------------------
项目目录结构:
文件上传页面index.jsp:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>文件上传与下载</title>
<%-- 使用cnd加速--%>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<%
String proPath = request.getServletContext().getContextPath();
%>
<script type="text/javascript">
<%-- 设置input宽度--%>
$(function (){
$("[type=file]").each(function (){
$(this).css("width","150px");
})
})
function toDown(){
window.location.href = '<%=proPath %>/filelist';
}
</script>
</head>
<body>
<form action="<%=proPath %>/upfile" method="post" enctype="multipart/form-data">
文件1:<input type="file" name="file1"/><br/>
文件2:<input type="file" name="file2"/><br/>
文件3:<input type="file" name="file3"/><br/>
<input type="submit" value="上传">
<div style="color: red;">${requestScope.msg}</div>
</form>
<button type="button" onclick="toDown();">去下载</button>
</body>
</html>
文件列表页面filelist.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>文件列表</title>
<%
// String path = request.getContextPath();
// String proPath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
String proPath = request.getServletContext().getContextPath();
%>
</head>
<body>
<c:forEach var="file" items="${requestScope.filelist}">
文件名:<c:out value="${file.filename}"/>
<a href="<%=proPath %>/downfile?id=<c:out value="${file.id}"/>&filename=<c:out value="${file.filename}"/>">下载</a><br>
</c:forEach>
<font>${requestScope.msg}</font>
</body>
</html>
javabean:
package com.web.beans;
public class FileTest {
private int id;
private String filename;
private String filepath;
public FileTest() {
}
public FileTest(int id,String filename, String filepath) {
this.id = id;
this.filename = filename;
this.filepath = filepath;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public String getFilepath() {
return filepath;
}
public void setFilepath(String filepath) {
this.filepath = filepath;
}
@Override
public String toString() {
return "FileTest{" +
"id=" + id +
", filename='" + filename + '\'' +
", filepath='" + filepath + '\'' +
'}';
}
}
c3p0配置:
<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
<named-config name="test">
<property name="user">root</property>
<property name="password">fuyou</property>
<property name="jdbcUrl">jdbc:mysql://119.91.83.99:3306/filetest?characterEncoding=UTF-8</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!-- 连接不够时的增长-->
<property name="acquireIncrement">5</property>
<!-- 初始化数据库连接池时连接的数量 -->
<property name="initialPoolSize">20</property>
<!-- 数据库连接池中的最大的数据库连接数 -->
<property name="maxPoolSize">25</property>
<!-- 数据库连接池中的最小的数据库连接数 -->
<property name="minPoolSize">5</property>
</named-config>
</c3p0-config>
数据库连接:
package com.web.jdbc;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* 创建时间 2021/11/25
* 描述:jdbc
* @author 鄢富友
*/
public class BaseDao {
private static PreparedStatement ps;
private static ResultSet rs;
private static ComboPooledDataSource dspool;
static Connection conn = null;
static {
dspool = new ComboPooledDataSource("test");
}
public Connection getConn(){
try{
conn = dspool.getConnection();
}catch (Exception e){
e.printStackTrace();
}
return conn;
}
public void closeAll(ResultSet rs,PreparedStatement ps,Connection conn){
if (rs != null){
try {
rs.close();
}catch (Exception e){
e.printStackTrace();
}
}else if (ps != null){
try {
ps.close();
}catch (Exception e){
e.printStackTrace();
}
}else{
if (conn != null){
try {
conn.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
}
数据库交互的接口:
package com.web.dao;
import com.web.beans.FileTest;
import java.util.List;
public interface FileService {
int addFile(FileTest file_bean);
List<FileTest> fileList();
String getfilepath(String id);
}
接口实现:
package com.web.dao.impl;
import com.web.beans.FileTest;
import com.web.dao.FileService;
import com.web.jdbc.BaseDao;
import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
/**
* 创建时间 2021/11/25
* 描述:
*/
public class FileServiceImpl implements FileService {
static BaseDao dao = new BaseDao();
private static PreparedStatement ps;
private static ResultSet rs;
static Connection conn = null;
@Override
public int addFile(FileTest file_bean) {
int i = 0;
String sql ="insert into file(filename,filepath) values(?,?);";
try {
conn = dao.getConn();
ps = conn.prepareStatement(sql);
ps.setObject(1,file_bean.getFilename());
ps.setObject(2,file_bean.getFilepath());
i = ps.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
dao.closeAll(rs,ps,conn);
}
return i;
}
@Override
public List<FileTest> fileList() {
String sql = "select * from file;";
List<FileTest> file_list = new ArrayList<>();
try{
conn = dao.getConn();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()){
FileTest oneFile = new FileTest(Integer.parseInt(rs.getString("id")),rs.getString("filename"),rs.getString("filepath"));
file_list.add(oneFile);
}
}catch (Exception e){
e.printStackTrace();
}finally {
dao.closeAll(rs,ps,conn);
}
return file_list;
}
@Override
public String getfilepath(String id) {
String filepath = null;
String sql = "select filepath from file where id=?;";
try{
conn = dao.getConn();
ps = conn.prepareStatement(sql);
ps.setObject(1,id);
rs = ps.executeQuery();
while (rs.next()){
filepath = rs.getString("filepath");
}
}catch (Exception e){
e.printStackTrace();
}finally {
dao.closeAll(rs,ps,conn);
}
return filepath;
}
}
文件上传的servlet:
package com.web.Servlet;
import com.web.beans.FileTest;
import com.web.dao.impl.FileServiceImpl;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
/**
* 创建时间 2021/11/25
* 描述:上传
* @author 鄢富友
*/
@WebServlet("/upfile")
public class UpServlet extends HttpServlet {
private static FileServiceImpl fileService = new FileServiceImpl();
protected void doGet(HttpServletRequest req, HttpServletResponse res){
String savePath = this.getServletContext().getRealPath("/WEB-INF/upload/");
File path = new File(savePath);
// 获取时间戳防止文件覆盖
Long startTs = System.currentTimeMillis();
if (!path.exists() && !path.isDirectory()){
path.mkdirs();
}
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload up = new ServletFileUpload(factory);
up.setHeaderEncoding("UTF-8");
if (!ServletFileUpload.isMultipartContent(req)){
return;
}
List<FileItem> file_list = up.parseRequest(req);
FileTest test_file = new FileTest();
int file_num = 0;
for (FileItem onefile : file_list){
if (!onefile.isFormField()){
String filename = onefile.getName();
if (filename == null || filename.trim().equals("")){
System.out.println("未选择文件!");
continue;
}
System.out.println(savePath+filename);
file_num ++;
test_file.setFilename(filename);
test_file.setFilepath(savePath+filename);
String filepath = savePath+filename;
InputStream in = onefile.getInputStream();
OutputStream out = new FileOutputStream(filepath);
byte[] bytes = new byte[1024];
int len = 0;
while ((len = in.read(bytes)) != -1){
out.write(bytes,0,len);
}
in.close();
out.close();
onefile.delete();
System.out.println(test_file);
fileService.addFile(test_file);
}
}
req.setAttribute("msg","上传成功!" + file_num + "个");
req.getRequestDispatcher("/index.jsp").forward(req,res);
return;
}catch (Exception e){
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest req,HttpServletResponse res){
doGet(req, res);
}
}
文件列表的servlet:
package com.web.Servlet;
import com.web.beans.FileTest;
import com.web.dao.impl.FileServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* 创建时间 2021/11/26
* 描述:文件列表
* @author 鄢富友
*/
@WebServlet("/filelist")
public class FileListServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
FileServiceImpl fileService = new FileServiceImpl();
List<FileTest> fileList = fileService.fileList();
req.setAttribute("filelist",fileList);
req.getRequestDispatcher("/filelist.jsp").forward(req,res);
return;
}
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
doGet(req, res);
}
}
文件下载的servlet:
package com.web.Servlet;
import com.web.dao.impl.FileServiceImpl;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
/**
* 创建时间 2021/11/25
* 描述:下载
* @author 鄢富友
*/
@WebServlet("/downfile")
public class DownServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res){
// 文件路径
String filename = req.getParameter("filename");
String id = req.getParameter("id");
FileServiceImpl fileService = new FileServiceImpl();
String filepath = fileService.getfilepath(id);
System.out.println(filename+" "+filepath);
res.setContentType("text/html;charset=UTF-8");
try {
if (filepath == null){
req.setAttribute("msg","参数错误!");
req.getRequestDispatcher("/filelist.jsp").forward(req,res);
return;
}
File file = new File(filepath);
if (!file.exists()){
req.setAttribute("msg","文件不存在!");
req.getRequestDispatcher("/filelist.jsp").forward(req,res);
return;
}
res.addHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(filename,"UTF-8"));
res.setContentType("multipart/form-data");
FileInputStream in = new FileInputStream(filepath);
OutputStream out = res.getOutputStream();
byte buffer[] = new byte[1024];
int len = 0;
while ((len = in.read()) != -1){
out.write(buffer,0,len);
}
in.close();
out.close();
}catch (Exception e){
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req, HttpServletResponse res){
doGet(req,res);
}
}
今日份收工。