springmvc文件上传

单⽂件上传

jsp

<form action="uploadFile" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<button type="submit"> 提交</button>
</form>

文件上传都是以post方式上传,然后把格式改成二进制的(multipart/form-data)。然后是controller处理接收到的数据,最后把文件写入到本地webapp下的upload文件中。

controller层

@Controller
//文件上传
public class FileController {
    @RequestMapping("uploadFile")
    public ModelAndView uploadFile(@RequestParam("file") MultipartFile file, ModelAndView mv, HttpServletRequest request) {

        // 判断⽂件是否为空,如果不为空进⾏对应的⽂件上传操作
        if (!file.isEmpty()) {
            try {
                // 获取项⽬的所在的路径 (绝对路径)
                String path = request.getServletContext().getRealPath("/");
                // 设置上传的⽂件存放的⽬录
                File uploadFile = new File(path + "/upload");
                // 判断⽂件⽬录是否存在,不存在则新建⽬录
                if (!uploadFile.exists()) {
                    // 新建⽬录
                    uploadFile.mkdir();
                }
                // 获取上传⽂件的原⽂件名
                String originalName = file.getOriginalFilename();
                // 获取上传的⽂件的后缀
                String suffix =
                        originalName.substring(originalName.lastIndexOf("."));
                // 通过系统当前时间的毫秒数,⽣成随机⽂件名 (避免上传的⽂件名重复)
                String fileName = System.currentTimeMillis() + suffix;
                // 上传⽂件 (转存⽂件到指定⽬录)
                file.transferTo(new File(uploadFile, fileName));
                // 设置成功的域对象
                mv.addObject("msg", "⽂件上传成功!");
            } catch (IOException e) {
                e.printStackTrace();
                // 如果报错,设置的域对象
                mv.addObject("msg", "⽂件上传失败!");
            }
        } else {
            // 上传⽂件不存在,设置的域对象
            mv.addObject("msg", "⽂件不存在,上传失败!");
        }
        mv.setViewName("file");
        return mv;
    }

多⽂件上传

jsp

<form action="uploadFiles" method="post" enctype="multipart/form-data">
<input type="file" name="files" />
<input type="file" name="files" />
<input type="file" name="files" />
<button type="submit"> 提交</button>
</form>

controller层

public ModelAndView saveFile(MultipartFile file, ModelAndView mv, HttpServletRequest request) throws IOException {
            // 判断⽂件是否为空,如果不为空进⾏对应的⽂件上传操作
        if (!file.isEmpty()) {
            // 获取项⽬的所在的路径 (绝对路径)
            String path = request.getServletContext().getRealPath("/");
            // 设置上传的⽂件存放的⽬录
            File uploadFile = new File(path + "/upload");
            // 判断⽂件⽬录是否存在,不存在则新建⽬录
            if (!uploadFile.exists()) {
            // 新建⽬录
                uploadFile.mkdir();
            }
            // 获取上传⽂件的原⽂件名
            String originalName = file.getOriginalFilename();
            // 获取上传的⽂件的后缀
            String suffix = originalName.substring(originalName.lastIndexOf("."));
            // 通过系统当前时间的毫秒数,⽣成随机⽂件名 (避免上传的⽂件名重复)
            String fileName = System.currentTimeMillis() + suffix;
            // 上传⽂件 (转存⽂件到指定⽬录)
            file.transferTo(new File(uploadFile, fileName));
            // 设置成功的域对象
            mv.addObject("msg", "⽂件上传成功!");
        }
        return mv;
    }
    @RequestMapping("/uploadFiles")
    public ModelAndView uploadFiles(@RequestParam("files") List<MultipartFile> files, ModelAndView mv,
                                    HttpServletRequest request) {
            // 判断⽂件集合是否为空

        if (files != null && files.size() > 0) {
            try {
                // 循环上传
                for (MultipartFile file : files) {
                    // 上传⽂件
                    mv = saveFile(file, mv, request);
                }
                mv.addObject("msg","⽂件上传成功!");
            } catch (IOException e) {
                e.printStackTrace();
                mv.addObject("msg","⽂件上传失败!");
            }
        }else {
            mv.addObject("msg","⽂件不存在,上传失败!");
        }
        mv.setViewName("file");
        return mv;
    }

这里采用的是封装上传单文件为一个方法,然后接收到files调用封装的方法逐个接收写入到本地中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值