Java web学习笔记--文件的上传与下载

文件上传与下载在Web开发中也是一项常见的功能
我们准备学习利用SmartUpload和FileUpload来实现文件上传与下载功能。

一、SmartUpload组件

1、概述

SmartUpload是专门用于实现文件上传及下载的免费组件。

2、SmartUpload优点

使用简单,编写少量代码,完成上传下载功能
能够控制上传内容
能够控制上传文件的大小、类型

3、SmartUpload缺点

SmartUpload目前已停止更新服务。

4、环境准备

在项目中引入jspsmartupload.jar文件,添加到WEB-INF\lib目录下

需要设置表单的enctype属性:

<form enctype="multipart/form-data" method="post">

二、案例演示:利用SmartUpload组件实现文件上传与下载

1、创建Web项目SmartUploadDemo

在这里插入图片描述

2、在WEB-INF目录里创建lib子目录,加入jspSmartUpload.jar

在这里插入图片描述

3.在web目录里创建上传子目录upload,用于存放上传文件
并在upload里存放一个图片文件scenery.jpg,后面用于测试下载功能。(随便找一张图片就行)

在这里插入图片描述

4、在web目录修改首页文件index.html

在这里插入图片描述

5、在web目录创建上传页面upload.html
并实现姓名和文件的非空校验

在这里插入图片描述

6、在web目录里创建处理上传的页面do_upload.jsp

在这里插入图片描述
运行程序,故意上传一个扩展名不符合要求的文件,看看会抛出什么异常

在这里插入图片描述
在这里插入图片描述
所以,我们要对文件上传语句作异常处理
在这里插入图片描述
重启服务器,上传不符合要求的文件,但是页面还是报500错误,而服务器端控制台并没有输出异常信息。
捕获异常语句应该修改如下:
在这里插入图片描述
此时,重启服务器,上传类型符合要求的文件,页面就不会报500错误了,只是显示空白页面,而服务器端控制台会输出异常信息。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
程序出现异常,应该在页面上弹出一个消息框告知用户,代码修改如下:
在这里插入图片描述
运行程序,效果如下:在这里插入图片描述
下面,我们来设置上传文件大小的关卡:
在这里插入图片描述
重启服务器,查看效果;
在这里插入图片描述
如果上传的文件类型与大小都符合要求,将file(内存)保存到服务器端指定位置
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
去掉扩展名:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再次完善:
在这里插入图片描述
启动服务器,查看运行效果::
在这里插入图片描述
下面,我们要显示上传的姓名以及图片。
在这里插入图片描述
重启服务器,查看运行效果::
在这里插入图片描述

但是这里还有点问题:如果你输入的名字是汉字,那么会有乱码

在这里插入图片描述
在这里插入图片描述

do_upload.jsp完整代码如下:
<%@ page import="com.jspsmart.upload.SmartUpload" %>
<%@ page import="com.jspsmart.upload.SmartUploadException" %>
<%@ page import="com.jspsmart.upload.File" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>显示上传数据</title>
</head>
<body>
<%!
   // 声明文件名及扩展名
   String filename, ext;
%>
<%
    // 实例化上传组件
    SmartUpload su = new SmartUpload();
    // 初始化上传,绑定页面上下文
    su.initialize(pageContext);
    // 判断文件类型是否符合要求
    try {
        // 设置上传文件允许类型
        su.setAllowedFilesList("jpg,gif,png,bmp");
        // 上传文件
        su.upload();
    } catch (Exception e) {
        // 弹出消息框告知用户,并且跳转到上传页面
        out.print("<script type='text/javascript'>" +
                  "   alert('只能上传jpg, gif, png或bmp文件!');" +
                  "   window.location = 'upload.html';" +
                  "</script>");
    }
 
    // 获取第一个上传文件
    File file = su.getFiles().getFile(0);
    // 判断文件上传是否发生丢失现象
    if (file.isMissing()) {
        // 弹出消息框告知用户,并且跳转到上传页面
        out.print("<script type='text/javascript'>" +
                "   alert('上传文件失败,请再次选择文件上传!');" +
                "   window.location = 'upload.html';" +
                "</script>");
    } else {
        // 定义上传文件的最大尺寸(单位:字节)
        long FILE_MAX_SIZE = 400000;
        // 判断上传文件大小是否符合要求
        if (file.getSize() <= FILE_MAX_SIZE) {
            // 获取上传文件名(包含扩展名)
            filename = file.getFileName();
            // 获取上传文件扩展名
            ext = file.getFileExt();
            // 去掉扩展名
            filename = filename.substring(0, filename.lastIndexOf("."));
            // 对文件名进行utf-8转码
            filename = new String(filename.getBytes(), "utf-8");
            // 利用时间戳与随机整数修改文件名
            filename = filename + String.valueOf(System.currentTimeMillis()) +
                    String.valueOf((int) (Math.random() * 900) + 100);
            // 获取应用程序的真实路径(物理路径)
            String realPath = application.getRealPath("/");
            // 创建上传文件的url
            String url = realPath + "upload\\" + filename + "." + ext;
            // 将上传文件保存到服务器指定位置
            file.saveAs(url, SmartUpload.SAVE_PHYSICAL);
            // 提示用户上传成功
            out.print("文件上传成功!<br/>");
            out.print("保存位置:" + url + "<br/>");
        } else {
            // 弹出消息框告知用户,并且跳转到上传页面
            out.print("<script type='text/javascript'>" +
                    "   alert('上传文件太大,上传失败!');" +
                    "   window.location = 'upload.html';" +
                    "</script>");
        }
    }
    // 获取表单提交的姓名数据
    String name = su.getRequest().getParameter("name");
    // 对姓名数据进行utf-8转码
    name = new String(name.getBytes(), "utf-8");
%>
姓名:<%= name %><br/>
照片:<br/>
<img src="upload/<%= filename %>.<%= ext %>" width="300" height="250">
</body>
</html>
7、在web目录里创建下载页面download.html

在这里插入图片描述

8、在web目录里创建处理下载页面do_download.jsp

在这里插入图片描述

9、重启tomcat服务器,查看下载运行效果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件上传Web开发常见的功能之一,Java也提供了多种方式来实现文件上传。其,一种常用的方式是通过Apache的commons-fileupload组件来实现文件上传。 以下是实现文件上传的步骤: 1.在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> ``` 2.在前端页面添加文件上传表单: ```html <form method="post" enctype="multipart/form-data" action="upload"> <input type="file" name="file"> <input type="submit" value="Upload"> </form> ``` 3.在后台Java代码处理上传文件: ```java // 创建一个DiskFileItemFactory对象,用于解析上传文件 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置缓冲区大小,如果上传文件大于缓冲区大小,则先将文件保存到临时文件,再进行处理 factory.setSizeThreshold(1024 * 1024); // 创建一个ServletFileUpload对象,用于解析上传文件 ServletFileUpload upload = new ServletFileUpload(factory); // 设置上传文件的大小限制,这里设置为10MB upload.setFileSizeMax(10 * 1024 * 1024); // 解析上传文件,得到一个FileItem的List集合 List<FileItem> items = upload.parseRequest(request); // 遍历FileItem的List集合,处理上传文件 for (FileItem item : items) { // 判断当前FileItem是否为上传文件 if (!item.isFormField()) { // 获取上传文件文件名 String fileName = item.getName(); // 创建一个File对象,用于保存上传文件 File file = new File("D:/uploads/" + fileName); // 将上传文件保存到指定的目录 item.write(file); } } ``` 以上代码,首先创建了一个DiskFileItemFactory对象,用于解析上传文件。然后设置了缓冲区大小和上传文件的大小限制。接着创建一个ServletFileUpload对象,用于解析上传文件。最后遍历FileItem的List集合,判断当前FileItem是否为上传文件,如果是,则获取文件名,创建一个File对象,将上传文件保存到指定的目录。 4.文件上传完成后,可以给用户一个提示信息,例如: ```java response.getWriter().write("File uploaded successfully!"); ``` 以上就是使用Apache的commons-fileupload组件实现文件上传的步骤。需要注意的是,文件上传可能会带来安全隐患,因此在处理上传文件时,需要进行严格的校验和过滤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值