使用jar包文件上传,只需要让MVC解析到的文件访问到指定的文件夹下获取静态资源即可。
所以只需要配置MVC的配置文件就行了。
mvc配置类
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
// 文件保存在真实目录/upload/下,
// 访问的时候使用虚路径/upload,比如文件名为1.png,就直接/upload/1.png就ok了。
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/upload/**")
.addResourceLocations("file:"+System.getProperty("user.dir")+"/upload/");
}
}
工具类
//文件上传 路径与上面配置的相同即可
public static String uploadfile(MultipartFile file) {
// 获得SpringBoot当前项目的路径:System.getProperty("user.dir")
String path = System.getProperty("user.dir") + "/upload/";
//获取文件的扩展名
String originalFilename = file.getOriginalFilename();
int lastIndexOf = originalFilename.lastIndexOf(".");
String suffix = originalFilename.substring(lastIndexOf);
//按照月份进行分类:
Calendar instance = Calendar.getInstance();
String month = "month"+(instance.get(Calendar.MONTH) + 1) + "/";
path = path + month;
File realPath = new File(path);
if (!realPath.exists()) {
realPath.mkdirs(); //创建多级目录使用mkdirs 一个目录使用mkdir
}
String filename = UUID.randomUUID().toString().replaceAll("-", "");
try {
file.transferTo(new File(realPath +"/"+ filename + suffix));
} catch (IOException e) {
e.printStackTrace();
}
//此处是返回文件的相对路径,就是在前台访问的映射路径。
return "/upload/" + month + filename + suffix;
}
//文件删除
public static void deleteFile(String filepath){
// 获得SpringBoot当前项目的路径:System.getProperty("user.dir")
String path = System.getProperty("user.dir");
path = path + filepath;
File file = new File(path);
boolean isOk = file.exists();
if(isOk){
file.delete();
}
}
controller
import com.qidian.trade.entity.Pic;
import com.qidian.trade.entity.Result;
import com.qidian.trade.utils.FileUtil;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@RestController
public class UploadController {
//实现文件上传
@PostMapping("/uploadPic")
public Result uploadPic(@RequestParam(value = "file", required = true) MultipartFile file, HttpServletRequest request) {
//上传文件
String uploadfile = FileUtil.uploadfile(file);
//获得http:ip:端口
String http = FileUtil.getHttp(request);
Pic pic = new Pic();
pic.setTotalPath(http+uploadfile);
pic.setFilePath(uploadfile);
return Result.success(pic);
}
//取消文件上传
@DeleteMapping("/deletePic")
public Result deletePic(String filepath) {
// System.out.println(filepath);
FileUtil.deleteFile(filepath);
return Result.success();
}
//实现上传一个文件并覆盖另一文件
@PostMapping("/overUpload")
public Result overUpload(@RequestParam(value = "file", required = true) MultipartFile file, HttpServletRequest request, String filePath) {
//上传文件
String uploadfile = FileUtil.uploadfile(file);
//删除原来的文件
FileUtil.deleteFile(filePath);
//获得http:ip:端口
String http = FileUtil.getHttp(request);
Pic pic = new Pic();
pic.setTotalPath(http+uploadfile);
pic.setFilePath(uploadfile);
return Result.success(pic);
}
}