[Spring-SpringMVC-MyBatis] 05- 文件上传下载 -上传篇(定义异常解析)


prtyaa
prtyaa 2023-12-27 15:16:03 52349
分类专栏: 资讯

数据库表及数据

create table student(

id int(5) primary key auto_increment,
name varchar(255) not null,
age int(3) not null,
score double (3,2) not null,
filename varchar(255) ,
filetype varchar(255)

)

insert into student values(default,'小猪',0,0,default,default);
insert into student values(default,'小蓉',0,0,default,default);
insert into student values(default,'小赫',0,0,default,default);
insert into student values(default,'小露',0,0,default,default);

 


添加依赖


页面准备

文件上传的表单必须具备以下两点

[A] 提交方式method="post"

[B]enctype="multipart/form-data" 二进制流

页面完整代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户注册</title>
</head>
<body>

<%--

   必须注意:
     [A] 提交方式method="post"

     [B]enctype="multipart/form-data"  二进制流

--%>

<h3>用户添加</h3>
<form method="post" enctype="multipart/form-data" action="fileUpload">


    <p>
        用户名:<input type="text" name="name"/>${msg}

    </p>

    <p>
        分数:<input type="text" name="score"/>

    </p>

    <p>
        年龄:<input type="text" name="age"/>

    </p>
    <p>
        文件:<input type="file" name="fi"/>

    </p>
    <p>
        <input type="submit" value="提交"/>

    </p>


</form>

</body>
</html>

 


配置文件上传解析器及资源放行

applicationContext-mvc.xml

<!--静态资源放行-->
    <mvc:resources mapping="/static/**" location="/static/"/>
    <mvc:resources mapping="/upload/**" location="/upload/"/>


    <!--创建文件上传的组件对象-->
    <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--上传文件 ,文件名称中文乱码-->
        <property name="defaultEncoding" value="utf-8"></property>
        <!--<property name="maxUploadSize" value="20000"></property>-->
    </bean>

编写相关代码


上面只是基础的实现了文件的上传,但仍有许多细节需要注意

1.上传文件中文乱码问题

applicationConetxt-mvc.xml

2.上传目标文件夹的问题

有文件夹就是用,没有就创建

上传本地文件夹写法

上传服务器

3.校验文件类型

4.解决同名文件覆盖问题

5.限制文件大小


6.异常跳转

定义异常解析器

一般出了错的话,用户体验会非常不好,一般都会跳转到一个可爱的页面来提示用户,出错啦

所以每当出现预料之外的错误的时候,都会通过配置异常解析器先跳到错误页面

applicationConetx-mvc.xml

 <!--自定义异常解析器-->
    <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <!--异常的全路径,必须注意是Spring抛出的异常-->
                <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error.jsp</prop>
            </props>
        </property>
    </bean>

 


完整代码

package com.lin.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Controller
public class FileController {

    @RequestMapping("fileUpload")
    public String fileUpload(String name, int age, int score, MultipartFile file, HttpServletRequest req) throws IOException {

        //定位上传位置并创建文件夹
        File dir = new File(req.getServletContext().getRealPath("/upload"));
        //如果不存在,就创建
        if (!dir.exists()){
            dir.mkdirs();
        }

        //验证文件的格式
        String contentType = file.getContentType();//图片文件类型是MIME开头的
        if (!contentType.startsWith("image/")){
            req.setAttribute("msg","文件类型错误");
            return "error";
        }
        //获取文件的大小
        long size = file.getSize();
        if(size > 102400){
            req.setAttribute("msg","文件过大");
            return "error";
        }

        //获取上传文件的原始名称
        String oneme = file.getOriginalFilename();
        //生成新的的随机名称
        /*UUID生成随机数,截取.后的名称类型*/
        String newName = UUID.randomUUID().toString() + oneme.substring(oneme.lastIndexOf("."));
        //将上方名称的文件存到目录中 定位上传的文件对象
        File newFile = new File(dir,newName);
        //将文件进行上传
        file.transferTo(newFile);

        return "redirect:/success.jsp";
    }
}

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=31398
赞同 0
评论 0 条
prtyaaL2
粉丝 1 发表 2553 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2969
【软件正版化】软件正版化工作要点  2888
统信UOS试玩黑神话:悟空  2860
信刻光盘安全隔离与信息交换系统  2746
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1280
grub引导程序无法找到指定设备和分区  1249
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  169
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  169
点击报名 | 京东2025校招进校行程预告  165
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  161
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!