手机端服务器开发Spring MVC上传头像,并返回JSON数据

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拥有必珍惜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值