commons-fileupload
commons-fileupload
1.4
2. applicationcontext.xml:
3. controller案例:
package com.imooc.reader.controller.management;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping("/management/book") //该类中url必须以/management/book
public class MBookController {
@GetMapping("/index.html")
public ModelAndView showBook() {
return new ModelAndView("/management/book");
}
@PostMapping("/upload")
@ResponseBody
public Map upload(@RequestParam("img") MultipartFile file, HttpServletRequest request) throws IOException {
//得到上传目录
//getServletContext() 由于程序运行时,程序处于执行状态,所以获取的是项目的 out目录的路径;
//getPath() 获取根路径
String uploadPath = request.getServletContext().getResource("/").getPath() + "/upload/";
//uploadPath这个路径中,有文件名idea file,这个文件名有空格,会被自动识别为%20,造成文件上传路径的错误,用以下方法把%20替代为空格即可解决问题
uploadPath=uploadPath.replaceAll("%20"," ");
System.out.println(uploadPath);
//格式化日期,作为文件名
String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
//getOriginalFilename:获得原始文件名字;
//substring:对元素文件名进行截取
//lastIndexOf最后一次出现“.”的位置
//以下第一句是获取原始文件的扩展名;
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
//保存文件到upload目录
file.transferTo(new File(uploadPath + fileName + suffix));
Map result = new HashMap();
result.put("errno", 0);
//创建Strign[]数组
result.put("data", new String[]{"/upload/" + fileName + suffix});
return result;
}
}



