记录写mvc项目的时候遇到的第二个bug(文件上传无法接收)

今天写商家上传图片步骤的时候,发现一直报空指针异常,经过不断排查发现,在jsp文件里的file传递到controller层的时候无法被MultipartFile类接收,经过十几个小时的查询以及自己不断测试最终发现jsp文件中缺少了一行代码

    <meta http-equiv="Content-Type" content="multipart/form-data; charset=utf-8" />

将其修改后错误解决

顺便记录一下文件上传的方法

首先导入依赖 使用文件上传需要 用到两个依赖

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.2</version>
        </dependency>

下一步就是我这次遇到问题的jsp文件

<%--
  Created by IntelliJ IDEA.
  User: 25493
  Date: 2021/5/25
  Time: 22:20
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Login</title>
    <meta http-equiv="Content-Type" content="multipart/form-data; charset=utf-8" />
</head>
<body>
<form action="/addMenuImpl" method="post" enctype="multipart/form-data">
    <input type="file" id="pictureFile" name="pictureFile">
    <input type="submit">
</form>

</body>
</html>

然后是controller层的

    @RequestMapping("/addMenuImpl")
    public String addMenuImpl(Item item,MultipartFile pictureFile,Model model) throws Exception {
        //保存文件(图片)时,这个文件(图片)有的时候文件名可能会重复,你保存多了会把原来的文件(图片)给覆盖掉,这就不太合适了,所以可以为每个文件(图片)生成一个新的文件名
        //新的文件(图片)名字
        String newName = UUID.randomUUID().toString();
       String oldName = pictureFile.getOriginalFilename();
        //截取文件(图片)的后缀,从.开始截取
        String sux = oldName.substring(oldName.lastIndexOf("."));
        //新建本地文件流
        File file = new File("D:\\Document\\JavaWeb\\ooms\\web\\uploadImg\\" + newName + sux);
        //写入本地磁盘
        pictureFile.transferTo(file);//transferTo方法可以将上传的文件(图片)写入本地磁盘
        //保存文件(图片)到数据库
        item.setPic(newName + sux);
        itemService.addPic(item);
        model.addAttribute("item", item);
        model.addAttribute("msg", "增加商品信息成功");
        return "show";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值