• SpringMVC 使用 MultipartFile 实现文件上传


    该代码实现了文件上传和文本字段同时传递到后台进行处理的功能。

    直接贴代码,中间涉及到的实体类就不贴了,和功能没啥关系的。

    Controller

     1     /**
     2      * 添加活动
     3      * 
     4      * @param req
     5      * @param file1
     6      * @param file2
     7      * @return
     8      */
     9     @RequestMapping(value = "/addActivity", method = RequestMethod.POST)
    10     public JSONObject addActivity(HttpServletRequest req, @RequestParam(value = "file1") MultipartFile file1,
    11             @RequestParam(value = "file2") MultipartFile file2) {
    12         logger.info("enter into method addActivity");
    13         StatusCode statusCode = activityService.addActivity(req, file1, file2);
    14         return new ResultBuilder<>(statusCode).toJSONObject();
    15     }

    Service

      1     /**
      2      * 添加活动
      3      * @param req
      4      * @param file1
      5      * @param file2
      6      * @return
      7      */
      8     public StatusCode addActivity(HttpServletRequest req, MultipartFile file1, MultipartFile file2) {
      9         try {
     10             //从request中获取上传的文件
     11             /*if(file1 == null){
     12                 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)req;
     13                 file1 = multipartRequest.getFile("file1");
     14             }
     15             if(file2 == null){
     16                 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)req;
     17                 file2 = multipartRequest.getFile("file2");
     18             }*/
     19             
     20             if (file1 == null || file2 == null) {
     21                 logger.info("the file is null");
     22                 return StatusCode.FILE_IS_NULL;
     23             }
     24             
     25             String filepath1 = uploadFile(file1);
     26             String filepath2 = uploadFile(file2);
     27             if (filepath1 == null || filepath2 == null) {
     28                 logger.info("the file upload fail");
     29                 return StatusCode.FILE_UPLOAD_FAIL;
     30             }
     31             
     32             String activityname = req.getParameter("activityname");//活动名称
     33             String winrate = req.getParameter("winrate");//中奖率
     34             String expectedwinners = req.getParameter("expectedwinners");//预期中奖人数
     35             String daysnum = req.getParameter("daysnum");//每天首次访问小程序可获得的抽奖次数
     36             String firstnum = req.getParameter("firstnum");//首次关注公众号可获得的抽奖次数
     37             String sharelimitnum = req.getParameter("sharelimitnum");//每日分享最多可获得的抽奖次数
     38             String friendclicknum = req.getParameter("friendclicknum");//每日好友点击最多可获得的抽奖次数
     39             String ruledesc = req.getParameter("ruledesc");//规则描述
     40             String starttime = req.getParameter("starttime");//开始时间
     41             String endtime = req.getParameter("endtime");//结束时间
     42             String prizename = req.getParameter("prizename");//奖品名称
     43             String prizeprice = req.getParameter("prizeprice");//奖品价格
     44             String cardid = req.getParameter("cardid");//卡片ID
     45             
     46             if (StringUtils.isNullOrEmpty(activityname) || StringUtils.isNullOrEmpty(expectedwinners) || StringUtils.isNullOrEmpty(daysnum)
     47                     || StringUtils.isNullOrEmpty(firstnum) || StringUtils.isNullOrEmpty(sharelimitnum) || StringUtils.isNullOrEmpty(friendclicknum)
     48                     || StringUtils.isNullOrEmpty(ruledesc) || StringUtils.isNullOrEmpty(starttime) || StringUtils.isNullOrEmpty(endtime)
     49                     || StringUtils.isNullOrEmpty(prizename) || StringUtils.isNullOrEmpty(prizeprice) || StringUtils.isNullOrEmpty(cardid)
     50                     || StringUtils.isNullOrEmpty(winrate)) {
     51                 logger.info("the paramter is null or empty");
     52                 return StatusCode.REQUEST_PARAM_ERROR;
     53             }
     54             
     55             if (Long.parseLong(starttime) >= Long.parseLong(endtime)) {
     56                 logger.info("the starttime less than or equal to endtime");
     57                 return StatusCode.ACTIVITY_TIME_ERROR;
     58             }
     59             
     60             Activity activity = new Activity();
     61             activity.setActivityname(activityname);
     62             activity.setCoverimage(filepath1);
     63             activity.setThumbnail(filepath2);
     64             activity.setWinrate(Double.valueOf(winrate));
     65             activity.setExpectedwinners(Integer.valueOf(expectedwinners));
     66             activity.setDaysnum(Integer.valueOf(daysnum));
     67             activity.setFirstnum(Integer.valueOf(firstnum));
     68             activity.setSharelimitnum(Integer.valueOf(sharelimitnum));
     69             activity.setFriendclicknum(Integer.valueOf(friendclicknum));
     70             activity.setRuledesc(ruledesc);
     71             activity.setStarttime(new Date(Long.parseLong(starttime)));
     72             activity.setEndtime(new Date(Long.parseLong(endtime)));
     73             activity.setPrizename(prizename);
     74             activity.setPrizeprice(Double.valueOf(prizeprice));
     75             activity.setCardid(Integer.valueOf(cardid));
     76             
     77             int result = activityMapper.addActivity(activity);
     78             if (result != 1) {
     79                 logger.info("add activity fail");
     80                 return StatusCode.ADD_ACTIVITY_FAIL;
     81             }
     82         } catch (Exception e) {
     83             logger.error("add activity error", e);
     84             return StatusCode.FAIL;
     85         }
     86         return StatusCode.SUCCESS;
     87     }
     88     
     89     /**
     90      * 文件上传
     91      * @param file
     92      * @param savepath
     93      * @return
     94      */
     95     public String uploadFile(MultipartFile file){
     96         String savepath = Constants.UPLOAD_FILE_IMAGE_SAVE_PATH;
     97         File filedir = new File(savepath);
     98         //如果文件夹不存在则创建    
     99         if (!filedir.exists()) {
    100             logger.info("create directory:{}", savepath);
    101             try{
    102                 filedir.mkdirs();
    103             }catch(Exception e){
    104                 logger.error("create directory fail", e);
    105                 return null;
    106             }
    107         }
    108         
    109         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    110         String nowdate = sdf.format(new Date(System.currentTimeMillis()));
    111         
    112         String originalfilename = file.getOriginalFilename();
    113         if (originalfilename == null || !originalfilename.contains(".")) {
    114             logger.info("file name is error:{}", originalfilename);
    115             return null;
    116         }
    117         String suffix = originalfilename.substring(originalfilename.indexOf("."));
    118         String filepath = savepath + nowdate + suffix;
    119         
    120         File targetFile = new File(filepath);
    121         try {
    122             file.transferTo(targetFile);
    123         } catch (Exception e) {
    124             logger.error("file upload fail", e);
    125             return null;
    126         }
    127         return filepath;
    128     }

    使用FORM的话需要指定enctype="multipart/form-data"

    附上我测试用的form表单

     1   <form action="http://localhost:8080/activity/addActivity" method="post" enctype="multipart/form-data">
     2     activityname<input type="text" name="activityname" value="第一个测试活动"/><br>
     3     expectedwinners<input type="text" name="expectedwinners" value="100"/><br>
     4     daysnum<input type="text" name="daysnum" value="3"/><br>
     5     firstnum<input type="text" name="firstnum" value="5"/><br>
     6     sharelimitnum<input type="text" name="sharelimitnum" value="6"/><br>
     7     friendclicknum<input type="text" name="friendclicknum" value="7"/><br>
     8     ruledesc<input type="text" name="ruledesc" value="这里简单描述下规则,自己写啊。"/><br>
     9     starttime<input type="text" name="starttime" value="1519292136927"/><br>
    10     endtime<input type="text" name="endtime" value="1519293136927"/><br>
    11     prizename<input type="text" name="prizename" value="笔记本电脑"/><br>
    12     prizeprice<input type="text" name="prizeprice" value="5999.56"/><br>
    13     cardid<input type="text" name="cardid" value="1"/><br>
    14     <input type="file" name="file1"/><br>
    15     <input type="file" name="file2"/><br>
    16     <input type="submit" value="提交"/>
    17   </form>
  • 相关阅读:
    C#设计模式之单例模式(Singleton Pattern)
    ASP.NET MVC Route之WebForm路由与源码分析(二)
    ASP.NET MVC Route之WebForm路由与源码分析(一)
    Autofac初探(一)
    Razor基础语法一
    ASP.NET MVC之视图传参到控制器的几种形式
    LINQ to SQL语句(2)Count/Sum/Min/Max/Avg操作符
    LINQ to SQL语句(1)Select查询的九种形式
    学习《深入理解C#》—— 泛型 (第三章3.1---3.2)
    学习《深入理解C#》—— 委托的构成、合并与删除和总结 (第二章1.1---1.4)
  • 原文地址:https://www.cnblogs.com/wbxk/p/8533999.html
Copyright © 2020-2023  润新知