java实现文件上传下载

简介: 喜欢的朋友可以关注下,粉丝也缺。    今天发现已经有很久没有给大家分享一篇技术文章了,于是想了一下给大家分享一篇java实现文件上传下载功能的文章,不喜欢的希望大家勿喷。

喜欢的朋友可以关注下,粉丝也缺。

    

今天发现已经有很久没有给大家分享一篇技术文章了,于是想了一下给大家分享一篇java实现文件上传下载功能的文章,不喜欢的希望大家勿喷。

    想必大家都知道文件的上传前端页面是需要用表单来提交,下面我就直接贴代码:

<div style="margin-bottom:5px" id="wjid">
            <form action="/automaticffice/SmartUploadServlet" method="post"  
		        enctype="multipart/form-data">  
		        <input id="filename" name="filename" type="file"  
		             /> <input type="submit" class="easyui-linkbutton" icon="icon-ok" value="提 交" /><span style="color: red">${message}</span>
		    </form>  
</div>

    下面我们来说说后台的代码应该怎么写,这里我是用了 jspSmartUpload.jar 这个包,使用非常的方便,这里我提供一个下载地址给大家

https://download.csdn.net/download/dsn727455218/10422388

    还是直接上代码:

@WebServlet("/SmartUploadServlet")
public class SmartUploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private Connection conn;
    private PreparedStatement pst;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        // 设置上传的保存路径
        String filePath = getServletContext().getRealPath("/") + "\\upload\\";
        System.err.println(filePath);
        // 创建文件对象 如果存在就不创建,否则创建文件夹
        File file = new File(filePath);
        if (file.exists()) {
            file.mkdir();
        }
        // 创建SmartUpload对象
        SmartUpload su = new SmartUpload();
        // 初始化对象
        su.initialize(getServletConfig(), request, response);
        // 设置上传文件大小
        su.setTotalMaxFileSize(1024 * 1024 * 100);
        // 设置上传文件类型
        //        su.setAllowedFilesList("txt,jpg,gif,xls,doc,docx");
        // 创建提示变量
        String result = "上传成功";
        try {
            // 设置禁止上传类型
            //            su.setDeniedFilesList("rar,jsp,js");
            su.upload();
            // 返回上传文件数量
            int count = su.save(filePath);
            System.out.println("上传成功" + count + "个文件!");

        } catch (Exception e) {
            result = "上传失败";
            e.printStackTrace();
        }

        // 获取上传成功的文件的属性
        for (int i = 0; i < su.getFiles().getCount(); i++) {
            com.jspsmart.upload.File tempFile = su.getFiles().getFile(i);
            System.out.println("---------------------");
            System.out.println("表单当中name属性值:" + tempFile.getFieldName());
            System.out.println("上传文件名:" + tempFile.getFieldName());
            System.out.println("上传文件长度:" + tempFile.getSize());
            System.out.println("上传文件的拓展名:" + tempFile.getFileExt());
            System.out.println("上传文件的全名:" + tempFile.getFilePathName());
            System.out.println("---------------------");
          
        }
        request.setAttribute("message", result);

        RequestDispatcher dispatcher = request.getRequestDispatcher("do/wenjian.jsp");
        dispatcher.forward(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

其实上传文件就是这么的简单,下面我们来说说文件的下载,相信很多的朋友有遇到过文件名字为中文的文件就无法下载的问题,接下来我们就详细的来说下这个问题:

同样的前端还是要以表单的方式提交:

input里面value的值是你需要下载文件的名字,action都知道是servetl的路径了

<form action="/automaticffice/BatchDownloadServlet"> <input type="hidden" name="filename" value="' + cellvalue + '"/> <input type="submit" value="下载文件"/></form>
在servlet中如何接收处理:
@WebServlet("/BatchDownloadServlet")
public class BatchDownloadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String name = request.getParameter("filename");
        /**
         * 这里是重点,如何解决文件名为中文的问题,不同的浏览器处理的方式会有所不同
         * IE的话,通过URLEncoder对filename进行UTF8编码,
         * 而其他的浏览器(firefox、chrome、safari、opera),则要通过字节转换成ISO8859-1了
         * 所以这里我们需要判断一下使用的是什么浏览器 在根据浏览器来做相应的编码
         */
        if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
            name = URLEncoder.encode(name, "UTF-8");
        } else {
            name = new String(name.getBytes(), "ISO-8859-1");
        }
        response.setContentType("application/octet-stream");
        // 以附件的形式下载
        response.setHeader("Content-Disposition", "attachment;filename=\"" + name + "\"");

        // 获取下载路径
        String path = getServletContext().getRealPath("/") + "\\upload\\";
        // 获取文件数组
        String[] filenames = request.getParameterValues("filename");
        // 创建空字符串
        String str = "";
        // 换行符
        String rt = "\r\n";
        // 创建压缩包输出流
        ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
        // 遍历文件数组
        for (String filename : filenames) {
            str += filename + rt;
            // 创建文件对象
            File file = new File(path + filename);
            zos.putNextEntry(new ZipEntry(filename));
            // 创建文件输出流
            FileInputStream fis = new FileInputStream(file);
            byte[] b = new byte[1024];
            int n = 0;
            while ((n = fis.read(b)) != -1) {
                zos.write(b, 0, n);
            }
            zos.flush();
            fis.close();
        }
        zos.setComment("成功" + rt + str);
        zos.flush();
        zos.close();
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

到这里已经完成了对文件的上传下载功能,如有需要可以加我Q群【308742428】大家一起讨论技术

下一篇我将继续为大家分享 如何实现文件的在线预览功能,希望大家期待

喜欢的朋友可以关注下,粉丝也缺。


相关文章
|
4月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
126 9
|
4月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
150 2
|
6天前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
1月前
|
Linux 网络安全 Docker
尼恩一键开发环境: vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)
尼恩提供了一系列文章,旨在帮助开发者轻松搭建一键开发环境,涵盖Java分布式、高并发场景下的多种技术组件安装与配置。内容包括但不限于Windows和CentOS虚拟机的安装与排坑指南、MySQL、Kafka、Redis、Zookeeper等关键组件在Linux环境下的部署教程,并附带详细的视频指导。此外,还特别介绍了Vagrant这一虚拟环境部署工具,
尼恩一键开发环境: vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)
|
1月前
|
Java API 数据处理
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
30 4
|
1月前
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
|
1月前
|
Java
java引入本地 MultipartFile 实现多部分文件上传
在Java中,`MultipartFile`通常用于处理通过HTML表单上传的文件。但在某些情况下,需要直接从本地文件系统获取文件并上传。本文介绍如何创建一个实现了`MultipartFile`接口的本地类`LocalMultipartFile`,将本地文件转换为`MultipartFile`对象,简化文件上传流程。此方法适用于批量上传等场景,避免了表单上传的复杂性。代码示例展示了如何实现和使用该类进行文件上传操作。作者:华科云商小彭。链接:[稀土掘金](https://juejin.cn/post/7377559533785530431)。
102 18
|
3月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
396 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
3月前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
130 34
|
2月前
|
前端开发 Java 开发工具
Git使用教程-将idea本地Java等文件配置到gitte上【保姆级教程】
本内容详细介绍了使用Git进行版本控制的全过程,涵盖从本地仓库创建到远程仓库配置,以及最终推送代码至远程仓库的步骤。
57 0