java实现文件上传下载

小编 2026-07-06 阅读:1748 评论:0
喜欢的朋友可以关注下,粉...

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

    

今天发现已经有很久没有给大家分享一篇技术文章了,于是想了一下给大家分享一篇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 = "
";        // 创建压缩包输出流        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】大家一起讨论技术

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

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


版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表