SpringBoot图片上传简单操作

创建工程,按照之前的步骤创建,明明项目名称为ImageUploaddome,(不要问为什么起这个名字,这就是缘分,说不清)。

先跑一下,看看有什么问题

image.png

好的没问题。下一步

不管三七二十一,先开个接口看看再说,爽就完事了。

java目录下,创建一个ImageController的Class。


image.png
打开ImageController

写入一个函数,映射一个接口

package com.cyhai.demo;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ImageController {

    @PostMapping("/uploadimage")
    public String imageUpload()
    {
        return "http://test.test.com/123456789.png";
    }

}

重启,打开postman,用post请求试试。http://localhost:8080/uploadimage
看到返回
http://test.test.com/123456789.png
那就OK
接下来是上传图片时参数处理

 public String imageUpload(@RequestParam("file") MultipartFile file, HttpServletResponse response, HttpServletRequest request)
    {
        
        return "http://test.test.com/123456789.png";
    }

然后处理图片名字与路径

        String filename = file.getOriginalFilename();//获取上传图片的名字
        String savefilePath = "/Users/chenhaige/Desktop/JAVAPro/Images";//保存图片到本地的路径
        Date date = new Date();
        String newFilename = Long.toString(date.getTime());//拼接生成新图片名字用的时间戳

然后做一个异常抛出。

@PostMapping("/uploadimage")
    public String imageUpload(@RequestParam("file") MultipartFile file, HttpServletResponse response, HttpServletRequest request)
    {
        String filename = file.getOriginalFilename();//获取上传图片的名字
        String savefilePath = "/Users/chenhaige/Desktop/JAVAPro/Images";//保存图片到本地的路径
        Date date = new Date();
        String newFilename = Long.toString(date.getTime());//拼接生成新图片名字用的时间戳

        if (file.isEmpty()) {
           return "文件为空!";
        }
        else {

            try {

                return "http://test.test.com/123456789.png";

            } catch (Exception e) {
                System.out.print(e);
                return "图片上传失败";
            }

        }
    }

}

重启,用postman上传图片

image.png

请求后能看到返回
http://test.test.com/123456789.png
但实际上在保存的目录里面并没有保存到,因为还没保存,好废话。但说明成功上传了。
接下来保存到指定文件夹下,添加一个处理图片的函数

public static void uploadFile(byte[] file,String filePath,String fileName) throws Exception {
        File targetFile = new File(filePath);//保存图片的路径
        if (!targetFile.exists()) {//如果路径不存在则创建路径
            targetFile.mkdirs();

        }

        FileOutputStream out = new FileOutputStream(filePath +"/"+ fileName);//打开输出流
        out.write(file);//写入文件
        out.flush();//立即写入socket
        out.close();//立即关闭socket
    }

然后在imageUpload中调用

 try {
                uploadFile(file.getBytes(), savefilePath, newFilename+filename);

                return "http://test.test.com/123456789.png";

       } catch (Exception e) {

重启,再次上传图片
再次返回http://test.test.com/123456789.png,然后去保存文件夹看一下,可以看到有图片了。
接下来我们尝试用大图片上传,找了一个9M多大小的图片。然后发现,返回

{
    "timestamp": "2019-07-24T01:41:12.551+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.",
    "path": "/uploadimage"
}
image.png

超出了默认的上传最大值。我们需要修改一下。找到application.properties,然后配置两个东西

spring.servlet.multipart.max-file-size = 100MB
spring.servlet.multipart.max-request-size = 100MB

然后重启,再次用大图片上传。然后发现TM成功了,图片也有了。下节介绍MySQL的链接与增删改查。

你可能感兴趣的:(SpringBoot图片上传简单操作)