Jsp+Servlet实现文件上传下载(三)--删除上传文件
接着上一篇讲:
Jsp+Servlet实现文件上传下载(二)--文件列表展示点击打开链接
本章来实现一下删除已上传文件,同时优化了一下第一章中的代码。
废话少说,上代码
--------------------------------------------------------分割线---------------------------------------------------------------------------------
1.调整列表页面list.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>
</head>
<body>
<h3>文件列表</h3>
<table class="acclist_tab" border="1" bordercolor="#000000" cellspacing="0" cellpadding="2" style="border-collapse:collapse;">
    <tr>
        <th>文件名</th>
        <th>文件大小(KB)</th>
        <th>操作</th>
    </tr>
    <c:if test="${not empty accessoryList}">
        <c:forEach items="${accessoryList}" var="acc">
            <tr>
                <td>${acc.fileName}</td>
                <td>${acc.fileSize}</td>
                <td><a href="<%=request.getContextPath()%>/removeUploadedFile?id=${acc.id}">删除</a></td>
            </tr>
        </c:forEach>
    </c:if>
</table>
</body>
</html>2.新增FileUtils工具类
package util;
import java.io.File;
/**
 * 文件操作工具类
 *
 * @author xusucheng
 * @create 2017-12-30
 **/
public class FileUtils {
    public static boolean delete(String path){
        File file = new File(path);
        if(!file.isFile()){
            System.out.println("删除失败,文件:"+path+"不存在!");
            return false;
        }
        file.delete();
        return true;
    }
}
3.调整附件实体DAO,新增load方法
package dao.upload;
import entity.upload.EntityAccessory;
import util.DBUtil;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
 * 附件上传DAO
 *
 * @author xusucheng
 * @create 2017-12-29
 **/
public class AccessoryDao {
    public static void add(EntityAccessory entity) {
        Connection conn = DBUtil.getConnection();
        String sql = "insert into tbl_accessory(file_name,file_size,file_ext_name,file_path) values(?,?,?,?)";
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, entity.getFileName());
            ps.setDouble(2, entity.getFileSize());
            ps.setString(3, entity.getFile_ext_name());
            ps.setString(4, entity.getFilePath());
            ps.execute();
            //conn.commit();
            DBUtil.close(null, ps, conn);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public static List<EntityAccessory> list() {
        Connection conn = DBUtil.getConnection();
        String sql = "select id,file_name,file_size,file_ext_name,file_path from tbl_accessory";
        List<EntityAccessory> accessoryList = new ArrayList<>();
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                EntityAccessory entity = new EntityAccessory();
                entity.setId(rs.getInt("id"));
                entity.setFileName(rs.getString("file_name"));
                entity.setFileSize(new BigDecimal(rs.getDouble("file_size") / 1024).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
                entity.setFile_ext_name(rs.getString("file_ext_name"));
                entity.setFilePath(rs.getString("file_path"));
                accessoryList.add(entity);
            }
            DBUtil.close(rs, ps, conn);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return accessoryList;
    }
    public static EntityAccessory load(int id){
        Connection conn = DBUtil.getConnection();
        PreparedStatement ps=null;
        ResultSet rs=null;
        EntityAccessory entity = new EntityAccessory();
        String sql = "select id, file_name,file_size,file_ext_name,file_path from tbl_accessory where id=?";
        try {
            ps = conn.prepareStatement(sql);
            ps.setInt(1,id);
            rs = ps.executeQuery();
            while (rs.next()){
                entity.setId(rs.getInt("id"));
                entity.setFileName(rs.getString("file_name"));
                entity.setFileSize(rs.getDouble("file_size"));
                entity.setFile_ext_name(rs.getString("file_ext_name"));
                entity.setFilePath(rs.getString("file_path"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(rs,ps,conn);
        }
        return entity;
    }
    public static void remove(int id) {
        Connection conn = DBUtil.getConnection();
        String sql = "delete from tbl_accessory where id=?";
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1,id);
            ps.execute();
            //conn.commit(); mysql默认开启了autocommit
            DBUtil.close(null,ps,conn);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
4.新增删除文件处理器,removeUploadedFileServlet
package servlet.upload;
import dao.upload.AccessoryDao;
import entity.upload.EntityAccessory;
import util.FileUtils;
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;
/**
 * 删除已上传文件
 *
 * @author xusucheng
 * @create 2017-12-30
 **/
@WebServlet("/removeUploadedFile")
public class removeUploadedFileServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //String filePath = request.getParameter("filePath");
        int fileId = Integer.valueOf(request.getParameter("id"));
        EntityAccessory entity = AccessoryDao.load(fileId);
        //删除文件
        FileUtils.delete(entity.getFilePath());
        //删除数据库记录
        AccessoryDao.remove(fileId);
        //跳回到文件列表页
        //request.getRequestDispatcher("listUploadedFiles").forward(request, response);
        response.sendRedirect("listUploadedFiles");
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}
5.测试效果截图
删除前:
删除后:
6.下集预告
实现文件下载功能
Jsp+Servlet实现文件上传下载(三)--删除上传文件的更多相关文章
- Java 客户端操作 FastDFS 实现文件上传下载替换删除
		FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK.这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK 至 Maven 中央仓库,目前中央仓库最新版仍旧是 1.2 ... 
- jsp上传下载+SmartUpload插件上传
		使用之前须要自己下载jspSmartUpload.jar包 这里找到一个支持中文的jar包,下载地址例如以下: http://www.blogjava.net/Files/hijackwust/jsm ... 
- SpringBoot集成基于tobato的fastdfs-client实现文件上传下载和删除
		1. 简介 基于tobato的fastdfs-client是一个功能完善的FastDFS客户端工具,它是在FastDFS作者YuQing发布的客户端基础上进行了大量的重构,提供了上传.下载.删除. ... 
- minio实现文件上传下载和删除功能
		https://blog.csdn.net/tc979907461/article/details/106673570?utm_medium=distribute.pc_relevant_t0.non ... 
- python2.7   操作ceph-cluster  S3对象接口 实现:   上传  下载  查询  删除    顺便使用Docker装个owncloud 实现UI管理
		python version: python2.7 需要安装得轮子: botofilechunkio command: yum install python-pip&& pip ... 
- 《DotNet Web应用单文件部署系列》三、混淆dll文件
		众所周知,C#编译后的dll文件可被反编译,网上搜索"C# 反编译"会出现一大堆资料.为了提高反编译成本,我们必须对dll文件进行混淆处理. 目前,C#混淆工具很多,我推荐obfu ... 
- [原创]java WEB学习笔记72:Struts2 学习之路-- 文件的上传下载,及上传下载相关问题
		本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ... 
- SpringMVC中使用  MultipartFile  进行文件上传下载及删除
		一:引入必要的包 <!--文件上传--> <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fil ... 
- silverlight webclient实现上传、下载、删除、读取文件
		1.上传 private void Button_Click_1(object sender, RoutedEventArgs e) { OpenFileDialog openFileDialog = ... 
- webDAV服务的开启以及客户端的上传、下载、删除、新建文件夾、列表的代码(C#)
		windows server 2003开启webDAV服务 1. 启动“IIS管理器”选择“WEB服务扩展”,选择“WEBDAV”的允许按钮启动WEBDAV功能 2.建立一个虚拟目录,对应到一个本地目 ... 
随机推荐
- [转帖]ntp导致的时钟回拨
			https://zhuanlan.zhihu.com/p/587313130 我们的服务器时间校准一般是通过ntp进程去校准的.但由于校准这个动作,会导致时钟跳跃变化的现象.而这种情况里面,往往回拨最 ... 
- [转帖]UNIX SOCKET简介
			UNIX Domain SOCKET 是在Socket架构上发展起来的用于同一台主机的进程间通讯(IPC).它不需要经过网络协议栈,不需要打包拆包.计算校验和.维护序列号应答等.只是将应用层数据从一个 ... 
- [转帖]Promethues + Grafana + AlertManager使用总结
			Prometheus是一个开源监控报警系统和时序列数据库,通常会使用Grafana来美化数据展示. 1|01. 监控系统基础架 1|11.1核心组件 Prometheus Server, 主要用于抓取 ... 
- [转帖]金仓数据库KingbaseES V8R6 索引膨胀
			索引膨胀 对于索引,随着业务不断的增删改,会造成膨胀,尤其Btree索引,也会涉及索引分裂.合并等,导致索引访问效率降低.维护成本增加.另外,索引页的复用与HEAP PAGE不一样,因为索引的内容是有 ... 
- [转帖]Java和Scala的前世今生
			第一部分:Java 计算机语言介绍 第一代语言:机器语言.指令以二进制代码形式存在 第二代语言:汇编语言.使用助记符表示一条机器指令 第三代语言:高级语言 C.Pascal.Fortran面向过程的语 ... 
- [转帖]MegaRaidCli64 常用命令解释
			MegaRaidCli64 常用命令解释 安装 查看 创建 删除 案例 安装 Centos wget https://docs.broadcom.com/docs-and-downloads/raid ... 
- [转帖]麒麟V10 arm 环境配置yum源
			# 进入yum源文件目录 cd /etc/yum.repos.d # 备份yum源文件 cp kylin_aarch64.repo kylin_aarch64.repo.bak # 修改源文件内容 v ... 
- [转帖]Innodb存储引擎-idb文件格式解析
			文章目录 ibd 文件格式解析 idb文件 page类型和格式(File Header & Trailer) FIL_PAGE_TYPE_FSP_HDR 格式 Extent Descripto ... 
- Linux 处理CPU和内存参数的方式总结
			Linux 处理CPU和内存参数的方式总结 关闭NUMA,关闭透明大页 比较简单的方法: vim /etc/default/grub 在 GRUB_CMDLINE_LINUX 里面添加配置: tran ... 
- [转帖]第5章 WINDOWS PE/COFF
			https://www.jianshu.com/p/35db9df2514f?utm_campaign=maleskine&utm_content=note&utm_medium=se ... 
