JavaWeb文件上传

本文介绍了一个前端页面的文件上传功能实现方法,并详细解释了后端如何使用Servlet接收和处理上传的文件。前端部分展示了如何正确配置HTML表单以支持文件上传,而后端部分则提供了具体的Java代码示例,包括文件大小限制、防止文件名乱码等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前端页面代码编写

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="./Upload" method="post" enctype="multipart/form-data">
        <input type="text" name="username">
        <input type="file" name="file">
        <input type="submit" value="提交">
    </form>
</body>
</html>

文件上传在前端页面需要注意一下几点:
1、form表单的提交方式需要设置为post
2、form表单的enctype属性需要设置为multipart/form-data
3、input框的type应该是file
4、input框必须有name

后台servlet实现步骤及代码

// 1.创建一个DiskFileItemFactory对象/创建工厂对象
DiskFileItemFactory factory = new DiskFileItemFactory();
// 2.1设置上传文件的临界值,超过临界值则会保存到磁盘上(这里设置的临界值为5M)
factory.setSizeThreshold(1024 * 1024 * 5);
// 2.2设置文件上传的保存路径(当上传文件大小查出临界值,则会默认保存到一下目录)
factory.setRepository(new File("F:\\"));
// 3.创建文件上传类
ServletFileUpload upload = new ServletFileUpload(factory);
// 3.1设置文件上传的文件名解析格式--防止乱码
upload.setHeaderEncoding("utf-8");
// 4.设置上传的文件大小临界值,超出会报错(这里设置的是10M的大小,超出这个大小会报错)
upload.setSizeMax(1024 * 1024 * 10);
// 5.解析上传信息
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
    // 判断收到的数据时一般表单域还是文件上传域
    if (item.isFormField()) {
        // 一般表单域
        // getFieldName()获取的是表单项的name值
        String fieldName = item.getFieldName();
        // getString()获取的是表单项的value值
        String value = item.getString();
        value = new String(value.getBytes("iso8859-1"), "utf-8");
        System.out.println("表单域name:" + fieldName + "值:" + value);
    } else {
        // 判断上传项不为空--上传文件
        if (item.getName() != null && item.getName() != "") {
            // 上传项
            // 获取上传文件的类型--可以判断是否符合规定的上传文件的要求
            String contentType = item.getContentType();
            // 获取上传文件的大小--可以判断是否不超过规定的上传文件要求
            long size = item.getSize();
            System.out.println("文件的类型:" + contentType + "文件的大小:" + size);
            // 这里预留部分用于判断上传文件的类型和大小是否满足要求

            // 获取文件的名称--有些浏览器上传上来的文件名带有路径,因此需要割掉
            String name = item.getName();
            // 判断name是否包含路径
            if (name.contains("//")) {
                // 上传的文件名包含路径,进行切割
                name = name.substring(name.lastIndexOf("//") + 1);
            }
            // 将文件保存到本地
            InputStream inputStream = item.getInputStream();
            FileOutputStream fileOutputStream = new FileOutputStream(new File("F://") + name);
            byte[] b = new byte[1024];
            int len = -1;
            while((len = inputStream.read(b)) != -1) {
                fileOutputStream.write(b, 0, len);
            }
            fileOutputStream.close();
            inputStream.close();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值