上传图片
1、在yaml配置文件中设置图片的上传路径
#图片上传的位置
img:
location: D:/upload/
2、控制类编写
package com.qykhhr.societywebsite.controller;
import com.qykhhr.societywebsite.entity.Article;
import com.qykhhr.societywebsite.entity.FileInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@Slf4j
@Controller
@RequestMapping("/blog")
public class BlogController {
/**
* 配置文件中配置文件保存的路径
*/
@Value("${img.location}")
private String folder;
/**
* 图片的上传
* @param request
* @param file
* @return
* @throws IOException
*/
@PostMapping("/imgUpload")
@ResponseBody
public FileInfo imageUpload(HttpServletRequest request, @RequestParam(value = "editormd-image-file", required = false) MultipartFile file) throws IOException {
if(!file.isEmpty()){
String filename = file.getOriginalFilename();//获取文件名
file.transferTo(new File(folder + filename ));
//http://localhost:8080
String basePath = request.getScheme()//获取协议号
+ "://"
+ request.getServerName()//获取IP地址
+ ":"
+ request.getServerPort()//获取端口号
+ request.getContextPath();//获取工程路径
return new FileInfo(1, "上传成功", basePath+"/upload/"+filename);
}
return null;
}
}
3、配置类编写
将D:\upload下的文件映射到当前项目/upload/下
package com.qykhhr.societywebsite.config;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class UploadConfig extends WebMvcConfigurerAdapter {
/**
* 将D:\\upload下的文件映射到当前项目/upload/下
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//addResourceHandler()里配置需要映射的文件夹,此处代表映射文件夹user下的所有资源。
//addResourceLocations()配置文件夹在系统中的路径,使用绝对路径,格式为“file:你的路径”
registry.addResourceHandler("/upload/**").addResourceLocations("file:D:\\upload\\");
}
}
4、运行效果
可以访问http://localhost:8080/upload/1.jpg看到图片
但是图片的真实路径却在D:\upload,并且项目中都没有upload这个文件夹