springboot文件上传demo

springboot文件上传小demo

一、准备前端页面

<form action="路径...." method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="上传">
</form>

注意:

  • 表单提交方式必须是post
  • 表单的enctype属性必须为multipart/form-data
  • 后台接受变量名字要与文件选择name属性一致

二、编写Controller

方式一:war包部署使用

 /**
     * 用来测试文件上传 - 这种方式:不能用于jar包部署
     * 注意:这种方式存在局限性,不推荐在使用这种方式进行文件上传了
     * @return
     */
    @RequestMapping("upload")
    public String upload(MultipartFile file, HttpServletRequest request) throws IOException {
    	//定义:接收文件对象 multipartFile file变量名要与form中input type="file"标签name属性名一致
        //文件名
        String originalFilename = file.getOriginalFilename();
        log.debug("文件名: {}", originalFilename);
        log.debug("文件大小: {}", file.getSize());
        log.debug("文件类型: {}", file.getContentType());

        //1.根据相对 上传 "upload" 获取绝对路径(真实路径) /users/桌面....   服务器: /home/springboot_day4..
        String realPath = request.getSession().getServletContext().getRealPath("/upload");
        log.debug("获取绝对路径: {}", realPath);

        //2.上传文件  参数1: 将文件写入到那个目录 aa.txt  .md xxx.xxx.xxx.md
        //修改文件名
        String ext = originalFilename.substring(originalFilename.lastIndexOf("."));
        String newFileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + ext;
        file.transferTo(new File(realPath, newFileName));
        
        return "redirect:/upload.jsp";
    }

方式二:适合于jar、war包部署
配置yml文件:

spring:
  servlet:
    multipart:   #修改文件上传的大小限制
      max-request-size: 120MB #运行请求传递文件大小最大为10M
      max-file-size: 120MB     #运行服务器可以处理的最大文件大小

# 指定文件上传位置
file:
  upload:
    dir: /Users/hao/upload #指定本地测试上传目录
	@Value("${file.upload.dir}")
    private String realPath; //通过配置文件注入

    /**
     * 第二种文件上传
     * 注意: 这种方式适用于任何一种部署方式 推荐使用这种方式
     * @param file
     * @return
     * @throws IOException
     */
    @RequestMapping("uploadByJarDeploy")
    public String uploadByJarDeploy(MultipartFile file) throws IOException {
        //文件名
        String originalFilename = file.getOriginalFilename();
        log.debug("文件名: {}", originalFilename);
        log.debug("文件大小: {}", file.getSize());
        log.debug("文件类型: {}", file.getContentType());

        //改名
        String ext = originalFilename.substring(originalFilename.lastIndexOf("."));
        String newFileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + ext;

        //上传文件到哪
        file.transferTo(new File(realPath,newFileName));

        return  "redirect:/upload.jsp";
    }

总结

方式二比方式一更加适合,因为在linux服务器下执行springboot项目的时候,springboot内嵌了tomcat服务器,直接可以使用java -jar 执行项目。但是war包就不同了,war包必须在linux服务器下的tomcat容器中将war包解压之后进行执行,这时候可以访问到项目的路径,所以方式一才得以执行,方法二的jar包访问不到项目内的文件夹,所以无法上传到项目里面去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值