先写一个config类解决本地路径访问不到问题
@Configuration
public class WebMvcConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//和页面有关的静态目录都放在项目的static目录下
// registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
//上传的图片在D盘下的OTA目录下,访问路径如:http://localhost:8081/OTA/d3cf0281-bb7f-40e0-ab77-406db95ccf2c.jpg
//其中OTA表示访问的前缀。"file:D:/OTA/"是文件真实的存储路径
registry.addResourceHandler("/imgs1/**").addResourceLocations("file:d:/Users/ZY192898/Desktop/aaa/");
registry.addResourceHandler("/imgs2/**").addResourceLocations("file:d:/Users/ZY192898/Desktop/");
}
}
前端:
<form class="inpform" id="uploadForm" enctype="multipart/form-data">
<input type="file" id="avatar" name="avatar">
<button type="button">上传</button>
</form>
<script>
$.ready()
{
$("button").click(function () {
var formData = new FormData($("#uploadForm")[0]);
console.log(formData);
$.ajax({
url: '/freemarker/upload',
type: 'POST',
data: formData,
cache: false,
processData: false,
contentType: false,
success:function(msg){
var txt2 = $("<img id=aa>");
$("body").after(txt2);
$("#aa").attr("src","/imgs2/"+msg);
}
});
});
}
</script>
Controller类:
@RequestMapping(value = "/upload")
@ResponseBody
public String upload(@RequestParam(value = "avatar", required = false) MultipartFile file) throws Exception {
String fileName = file.getOriginalFilename();
String newFileName=fileName.split("\\.")[0];
//String suffixName = fileName.substring(fileName.lastIndexOf("."));
//SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
//Random r = new Random();r.nextInt(100)
System.out.println(newFileName);
File f = new File("d:\\Users\\Desktop\\"+newFileName+".png");
if (!f.exists()) {
f.createNewFile();
}
FileInputStream in =(FileInputStream) file.getInputStream();
FileOutputStream out = new FileOutputStream(f);// 指定要写入的图片
int n = 0;// 每次读取的字节长度
byte[] bb = new byte[1024];// 存储每次读取的内容
while ((n = in.read(bb)) != -1) {
out.write(bb, 0, n);// 将读取的内容,写入到输出流当中
}
//执行完以上后,磁盘下的该文件才完整,大小是实际大小
out.close();// 关闭输入输出流
in.close();
return f.getName();
}
application文件配置文件传输大小:
spring.servlet.multipart.max-file-size=5MB
spring.servlet.multipart.max-request-size=10MB