//前端传递的数据名称和实体类的属性名称相同时,可以自动注入到对象中
//如果名称不一样,不能自动注入,只能通过@RequestParm注解,进行手动的映射
//文件上传,第一件事文字存到数据库里(MyBatis),文件本身存储在磁盘里(IO)
@RequestMapping("addBook")
@ResponseBody
public Map addBook(@RequestParam("title") String title, @RequestParam("desc") String desc, @RequestParam("price")Double price, @RequestParam("profile")CommonsMultipartFile file, HttpServletRequest request) {
System.out.println("title="+title);
System.out.println("Desc="+desc);
System.out.println("price="+price);
System.out.println("file="+file.getOriginalFilename());
Mapmap=new HashMap<>();
String filePath=request.getServletContext().getRealPath("uploads");
System.out.println(filePath);
File path=new File(filePath);
if(!path.exists()){
path.mkdirs();
}
//构造文件名,用户名+时间戳
User user=((User)request.getSession().getAttribute("user"));
String username;
if(user!=null){
username=user.getUserName();
}else {
username="";
}
long time = System.currentTimeMillis();
String filename=username+'_'+time+'_'+file.getOriginalFilename();
File fileUpload =new File(filePath,filename);
//创建输入流和输出流
try {
InputStream is= file.getInputStream();
OutputStream os= new FileOutputStream(fileUpload);
byte[]buffer = new byte[1024];
int len;
System.out.println("size="+file.getSize());
while ((len = is.read(buffer))!=-1){
System.out.println("len="+len);
os.write(buffer,0,len);
}
is.close();
os.close();
map.put("error",0);
map.put("status","success");
map.put("message","上传文件成功");
} catch (IOException e) {
e.printStackTrace();
map.put("error",-1);
map.put("status","error");
map.put("message","上传文件失败");
}
return map;
}