现在需求是:将一张图片上传到本地,并且可以通过浏览器访问。
1. 写工具类:
在utils中写一个uploadImage类,在这里配置图片上传到哪个文件夹下,并且返回图片访问地址。
package com.zhuwei.bgaccess.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 = "D:\\ideaProject\\background-management-system\\src\\main\\resources\\static\\images\\";
// 定义访问图片路径
private static final String SERVER_PATH = "http://localhost:8900/images/";
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();
}
System.out.println(SERVER_PATH);
return SERVER_PATH + newFileName;
}
}
2.写控制类
在controller中写一个控制类,来规定请求访问的接口,调用工具类,完成图片上传功能。
package com.zhuwei.bgaccess.controller;
import com.zhuwei.bgaccess.utils.UploadImage;
import com.zhuwei.bgaccess.utils.ResultObject;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
@RequestMapping("/upload")
public class ImageController {
@RequestMapping("/image")
public ResultObject uploadImage(@RequestParam(value = "file") MultipartFile multipartFile) {
// 调用写好的工具类
String imagePath = UploadImage.upload(multipartFile);
if(imagePath == null) {
return ResultObject.apiError("上传失败");
} else {
return ResultObject.ok("上传成功").data("imgUrl", imagePath);
}
}
}
使用postman测试,可以上传,但是在浏览器上不能立即看到图片,需要重启服务后,才可以访问图片。