package com....;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
/*
* @describe 上传头像文件,上传文件夹需存在
*/
@Controller
public class ThenHeadPortraitController {
private final int MAX_SIZE = 1024 * 1024 * 1; //限制用户头像的最大值为1M
private String[] extendNamesArray = {".jpg",".jpeg"}; //用户头像的扩展名数组,方面验证
private String rootPath; //文件根路径
private String imageNewPath; //头像新路径(包含头像名以及扩展名)
private String imageOldPath; //头像在数据库中的原有路径(包含头像名以及扩展名)
private String imageNames; //头像的新名字(时间+用户名),时间精确到毫秒
private String extendName ; //头像的扩展名,进行扩展名验证,以达到对用户头像的图片类型限制
private String message; //用于返回上传头像的信息
private String imageURL; //用于返回用户头像存放的物理路径
private MultipartFile imageFile;
//测试时使用方法
@RequestMapping(value="/then/uploadHeadPortrait.jspx",method= RequestMethod.GET)
public void upload(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException
{
request.getRequestDispatcher("../MyJsp.jsp").forward(request,response);
return;
}
@RequestMapping(value="/then/uploadHeadPortrait.jspx",method= RequestMethod.POST)
@ResponseBody
public Map<String,String> uploadHeadPortrait(String account,HttpServletRequest request){
String imageAccount = account; //存储用户临时的用户名,以便进行文件的命名
Map<String,String> map = new HashMap<String,String>();
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
//获取上传头像
imageFile = multipartRequest.getFile("file");
//获取上传头像的文件名
String fileName = imageFile.getOriginalFilename();
System.out.println("OriginalFilename:"+fileName);
//获取文件扩展名
extendName = fileName.substring(fileName.lastIndexOf("."));
//获取上传头像的大小
int imageSize = (int) imageFile.getSize();
//验证头像的扩展名是否符合要求
if((extendName.equals(extendNamesArray[0])||extendName.equals(extendNamesArray[1]))&&(imageSize<=MAX_SIZE)){
rootPath = request.getSession().getServletContext().getRealPath("//upload");
System.out.println("rootPath:"+rootPath);
imageNames = getUploadCurrentTime() + imageAccount; //重新命名上传头像名称
System.out.println("imageNames:"+imageNames);
imageNewPath = rootPath+"\\"+imageNames+extendName;
System.out.println("imageNewPath:"+imageNewPath);
//判断新路径是否等于数据库中已存在的路径,不等于,则存储新路径,删除原有头像文件
if(!imageNewPath.equals(getDatabaseImageOldPath(imageAccount))){
if(getDatabaseImageOldPath(imageAccount)!=null&&getDatabaseImageOldPath(imageAccount)!=""){
File file = new File(getDatabaseImageOldPath(imageAccount));
if(imageSave(imageAccount,imageNewPath)){
if(file.exists()){
file.delete();
}
message = "头像上传成功";
imageURL = imageNewPath;
map.put("message",message);
map.put("imageURL",imageURL);
}else{
//保存失败
message = "头像保存失败";
imageURL = null;
map.put("message",message);
map.put("imageURL",imageURL);
}
}
}else{
message = "头像上传失败";
imageURL = null;
map.put("message",message);
map.put("imageURL",imageURL);
}
}else{ //图像格式不符合或者头像的大小大于1M
message = "头像上传失败,格式或大小不符合";
imageURL = null;
map.put("message",message);
map.put("imageURL",imageURL);
}
return map;
}
//获取头上上传的当前时间
private String getUploadCurrentTime(){
return new SimpleDateFormat("yyyyMMddHHmmssSSS") .format(new Date() );
}
//获取数据库中原有路径,如有则返回路径,否则返回可能为空或“”
private String getDatabaseImageOldPath(String account){
UserDetail userDetatilOldPath=userService.findByUsername(account).getDetail();
imageOldPath = userDetatilOldPath.getAvatar();
return imageOldPath;
}
//对原有头像的新路径进行存储,存储后进行检查,时候已经存储,存储成功返回true,失败则返回false
private boolean imageSave(String account,String imageNewPath){
File uploadFile = new File(imageNewPath);
try {
FileCopyUtils.copy(imageFile.getBytes(), uploadFile);
FileUtils.copyInputStreamToFile(imageFile.getInputStream(), new File(imageNewPath));
UserDetail ud=userService.findByUsername(account).getDetail();
ud.setAvatar(imageNewPath); //设置头像新路径
userDetailService.update(ud) ; //对头像进行数据库更新操作
if(getDatabaseImageOldPath(account)!=null||getDatabaseImageOldPath(account).equals("")){
return true;
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("【上传头像失败...】");
return false;
}
return false;
}
@Autowired
private UserDetailService userDetailService;
@Autowired
private UserService userService;
}
手机端服务器开发Spring MVC上传头像,并返回JSON数据
最新推荐文章于 2022-11-10 23:11:45 发布