spring文件上传
普朗克麻辣鸡 人气:2编写页面,注意 method="post" enctype="multipart/form-data"
编写controller 修改一起的上传方法,固定硬盘位置 注意@RequestParam MultipartFile pic 其中pic和页面file的name对应
@RequestMapping("/upload")
public String add(News news, @RequestParam MultipartFile[] pic, HttpServletRequest request){
//System.out.println(news.getAddTime()+"..............");
//添加新闻 ,添加之后,id已经被赋值了
newsService.add(news);
if(pic!=null&&pic.length>0){
for (int i = 0; i < pic.length; i++) {
MultipartFile multipartFile = pic[i];
//1,在项目根目录下创建uploadfiles目录,把相对路径转换绝对路径,为后面文件读写做准备
//request.getRealPath("uploadfiles");
String newFilePath = "uploadfiles/a/b/";
// servlet中全局域的对象 ServletContext 等于jsp中application
String realPath = request.getServletContext().getRealPath(newFilePath);
System.out.println("真实路径:"+realPath);
//获取文件的原来名称 originalFilename = a.jpg
String originalFilename = multipartFile.getOriginalFilename();
//组装新的图片名称,避免不同用户上传相同名称图片时,产生覆盖
//获取源文件名称后缀 suffix = .jpg
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
// 组装新名称
String newFileName = UUID.randomUUID()+suffix;
File file = new File(realPath+"/"+newFileName);
//判断文件是否存在,如果不存在,创建父目录
if(!file.exists()){
//创建父目录
file.mkdirs();
}
try {
//文件读写 springmvc底层提供文件读写,把本地的pic读写到服务器的file对象
multipartFile.transferTo(file);
} catch (IOException e) {
e.printStackTrace();
}
NewsFile newsFile =new NewsFile();
//设置上传文件的原始名称
newsFile.setName(originalFilename);
//设置上传后的服务器路径 //uploadfiles/a/b/c653c176-3ad0-4f44-8127-ef378989b587.jpg
newsFile.setPath(newFilePath+newFileName);
//设置上面添加新闻后返回的ID
newsFile.setNewsId(news.getId());
//保存附件
newsFileService.add(newsFile);
}
}
return "redirect:list.do";
}
可以将上述方法分装为静态方法,可重复调用,减少代码复用
加载全部内容