专栏首页深入理解JavaSpring Boot实现文件上传

Spring Boot实现文件上传

一、文件上传的配置

Spring Boot默认支持文件上传,对文件上传支持友好。对上传进行配置如下:

# 配置上传参数
spring:  
    http:
        multipart:
          enabled: true # 默认支持文件上传
          file-size-threshold: 0 # 支持文件写入磁盘
          max-file-size: 50MB # 最大文件上传大小
          max-request-size: 100MB  # 最大支持请求大小

Spring Boot默认支持文件上传,enabled这个可以不用配置,默认支持将文件写入磁盘,默认最大文件大小是1MB,默认最大请求大小是10MB,后面两个参数常常需要自己重新配置才能达到要求。

二、编写文件上传的Controller

前端页面的上传模块可以按照如下编写:

<form method="POST" enctype="multipart/form-data" action="/index/fileupload">

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

    <input type="submit" value="上传"/>

</form>

注意:表单中方法必须是POST,enctype和action都必须设置。 文件上传的Controller如下:

package com.lemon.springboot.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * @author lemon
 */
@Controller
@RequestMapping("/index")
public class IndexController {

    private static final Logger logger = LoggerFactory.getLogger(IndexController.class);

    @RequestMapping
    public String index() {
        logger.info("访问主页");
        return "index";
    }

    @RequestMapping(value = "/fileupload", method = RequestMethod.POST)
    @ResponseBody
    public String upload(@RequestParam("lemonFile") MultipartFile file) {
        logger.info("文件上传方法访问成功");
        if (file.isEmpty()) {
            return "文件上传失败";
        }
        // 获取文件名
        String originalFilename = file.getOriginalFilename();
        logger.info("上传文件的文件名是:" + originalFilename);

        // 获取文件后缀名
        String suffixName = originalFilename.substring(originalFilename.lastIndexOf("."));
        logger.info("上传文件的后缀名是:" + suffixName);

        // 设置文件上传绝对路径
        String filePath = "/Users/lemon/IdeaProjects/springboot/upload/";

        // 获取UUID名称
        String fileName = UUID.randomUUID() + suffixName;

        // 获取上传文件的File对象
        File dest = new File(filePath + fileName);

        // 开始上传
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
        try {
            file.transferTo(dest);
            logger.info("上传成功");
            return "上传成功";
        } catch (IllegalStateException | IOException e) {
            e.printStackTrace();
            logger.info(e.getMessage());
        }
        return "上传失败";
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Security技术栈开发企业级认证与授权(六)使用REST方式处理文件服务

    从浏览器访问http://localhost:8080/file/152445566433就可以将之前模拟上传的文件下载下来,其中链接后面的数字是文件的上传后的...

    itlemon
  • Spring Security技术栈开发企业级认证与授权(十二)将短信验证码验证方式集成到Spring Security

    在Spring Security中,我们最常用的登录验证机制是基于用户名和密码的,输入了用户名和密码以及图片验证码之后,就会进入一系列的过滤器链中,直到验证成功...

    itlemon
  • Spring Boot整合ActiveMQ

    在本地或者虚拟机中安装ActiveMQ并启动ActiveMQ服务,启动完毕之后通过浏览器来访问ActiveMQ的管理页面http://localhost:816...

    itlemon
  • Angular2使用ng2-file-upload上传文件

    Angular2中有两个比较好用的上传文件的第三方库,一个是ng2-file-upload,一个是ng2-uploader。ng2-uploader是一个轻便的...

    用户5640963
  • Spring Boot + Vue,手把手教你做文件上传

    在 Vue.js 中,如果网络请求使用 axios ,并且使用了 ElementUI 库,那么一般来说,文件上传有两种不同的实现方案:

    江南一点雨
  • 《ASP.NET Core 微服务实战》-- 读书笔记(第6章)

    我们大脑就是一种事件溯源系统,接收感官多种形式刺激,大脑负责对这些刺激进行合适排序,大约每隔几百毫秒,对刺激构成的流进行运算,而运算的结果,就是我们所说的事实

    郑子铭
  • docker exec执行多个命令详解 原

    docker exec命令能够在运行着的容器中执行命令。docker exec命令的使用格式:

    拓荒者
  • mask rcnn训练自己的数据集

    最近迷上了mask rcnn,也是由于自己工作需要吧,特意研究了其源代码,并基于自己的数据进行训练~

    3D视觉工坊
  • 某行小程序投标测试的思路和坑

    先发下牢骚吧,最近看FB里面的文章,大体上往底层概念越来越多,各种挖矿木马的,还有各种难理解的概念,都没有勇气点开看看了。

    FB客服
  • 15年前,一则公路旁的Google的招聘广告

    最近小李在看吴军博士的《浪潮之巅》一书,下册书中讲到了Google公司的发展故事,作者用了其14个不为人知或被公众忽略的侧面来描述这个传奇的公司。而在对Goog...

    老肥码码码

扫码关注云+社区

领取腾讯云代金券