1.添加依赖

<dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>

2.提前创建好存放图片的文文件夹(也可以通过file对象动态创建)

android 上传图片到springboot服务器 springboot上传图片到static_静态资源

3.为了访问静态资源文件,修改appaction.yml文件

spring:
// 由于static静态资源下的文件是默认不能被访问的
  mvc:
    static-path-pattern: /static/**
    // 配置自己新建的文件夹,前面是默认的,最后一个是新增的
  web:
    resources:
      static-locations: classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources,classpath:/static/img

4.编写文件处理类

package cn.hlg.utils;
import org.springframework.web.multipart.MultipartFile;

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

/*
 *上传图片所用到的工具类
 * */
public class UploadImage {

    // 定义一个目标路径,就是我们要把图片上传的位置

    private static String BASE_PATH = "";

    //静态初块创建文件夹 只会执行一次
    static{
        File file = new File("src/main/resources/static/image");
        if (!file.exists()) {
            file.mkdirs();
            System.out.println("创建目录" + file.getName() + "成功:"+file.getAbsoluteFile());
            BASE_PATH = file.getAbsolutePath();
            System.out.println();
        }else{
            System.out.println("创建目录" + file.getName() + "失败,目标目录已经存在");
             BASE_PATH = file.getAbsolutePath();
        }
    }


    // 定义访问图片路径
    private static final String SERVER_PATH = "http://localhost/static/image/";

    public static String upload(MultipartFile file) {
        // 获取上传图片的名称
        String filename = file.getOriginalFilename();
        // 为了保证图片在服务器中名字的唯一性,使用UUID来对filename进行改写
        String uuid = UUID.randomUUID().toString().replace("-", "");
        // 将生成的uuid和filename惊醒拼接
        String newFileName = uuid + '-' + filename;
        // 创建一个文件实例对象
        File image = new File(BASE_PATH, newFileName);
        // 对这个文件进行上传操作
        try {
            file.transferTo(image);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return SERVER_PATH + newFileName;
    }
}

5.创建控制层测试

@RestController
@CrossOrigin(origins = "*")
public class ImagController {
    @RequestMapping("/image")
    public Answer uploadImage(@RequestParam(value = "file") MultipartFile multipartFile, Answer answer) {
        // 调用写好的工具类
        String imagePath = UploadImage.upload(multipartFile);
        if (imagePath==null){
            answer.putValidMessageForOk("上传失败");
        }else{
            answer.putValidMessageForOk(imagePath);
        }
        return answer;
    }

由于默认1MB大小所报的错修改允许上传的文件大小即可

android 上传图片到springboot服务器 springboot上传图片到static_上传_02


配置application.yml

// 由于默认大小只有1MB,所以需要自己设置
  servlet:
    multipart:
      max-file-size: 2000MB
      max-request-size: 25000MB

结果:成功上传

android 上传图片到springboot服务器 springboot上传图片到static_java_03

浏览器访问

android 上传图片到springboot服务器 springboot上传图片到static_java_04

6.图片能访问了,但是static目录下的index.html访问不了T,上传图片和不能立即显示,需要点一下idea后再回到页面刷新

(是因为配置了:mvc: static-path-pattern: /static/**)

首先修改 appaction.yml里的配置

android 上传图片到springboot服务器 springboot上传图片到static_静态资源_05

创建一个类,继承WebMvcConfigurationSupport类,重写addResourceHandlers()方法,给静态资源请求添加映射,将路径中包括/static/的静态资源访问映射到resources/static/目录下

public class AppConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
           //映射static路径的请求到static目录下
        //获取文件的真实路径
        String path = System.getProperty("user.dir")+"\\src\\main\\resources\\static\\image\\";
        //path为静态资源真实路径
        registry.addResourceHandler("/static/image/**") //虚拟路径
                .addResourceLocations("file:"+path);
        WebMvcConfigurer.super.addResourceHandlers(registry);

    }
   }

OK,解决问题,对于static下的imagee静态文件例如图片1.jpg可以正常访问,index.html文件也可以正常访问

http://localhost/mainPage
http://localhost/static/image/0062c6906acc42a09b4a811ab0035f56-1.jpg