创建工程,按照之前的步骤创建,明明项目名称为ImageUploaddome,(不要问为什么起这个名字,这就是缘分,说不清)。
先跑一下,看看有什么问题
好的没问题。下一步
不管三七二十一,先开个接口看看再说,爽就完事了。
java目录下,创建一个ImageController的Class。
打开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上传图片
请求后能看到返回
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"
}
超出了默认的上传最大值。我们需要修改一下。找到application.properties,然后配置两个东西
spring.servlet.multipart.max-file-size = 100MB
spring.servlet.multipart.max-request-size = 100MB
然后重启,再次用大图片上传。然后发现TM成功了,图片也有了。下节介绍MySQL的链接与增删改查。