springMVC实现文件上传下载

(1)springMvc.xml



    <!-- 文件上传相关 解析器 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--one of the properties available;the maximum upload size in bytes 10M -->
        <property name="maxUploadSize" value="10485760" />
    </bean>


(二) controller层编写


package com.sf.QLAHP.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.FilenameUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.sf.QLAHP.Enum.RebackMessageEnum;
import com.sf.QLAHP.domain.AppVersionDo;
import com.sf.QLAHP.query.CommonConditionsQuery;
import com.sf.QLAHP.service.AppVersionService;
import com.sf.QLAHP.util.MD5Util;
import com.sf.erui.common.response.Response;
import com.sf.erui.common.response.ResponseHelper;


@Controller
@RequestMapping("dispatch")
public class AppUploadController {
    
    private static Logger logger = LoggerFactory.getLogger(AppUploadController.class);
    
    
    @Autowired
    private AppVersionService appVersionService;
    
    
    /*
     * 采用file.Transto 来保存上传的文件
     */
    @RequestMapping("fileUpload")
    @ResponseBody
    public Response fileUpload(@RequestParam("file") MultipartFile file ,AppVersionDo appVersion ,HttpServletRequest request) throws IOException {
        //判断如果上传文件为空,直接返回
        if(file.isEmpty()) {
            return ResponseHelper.buildFail(RebackMessageEnum.Upload.getFailure());
        }
        //获取项目的真实路径:D:\eclipseWorkSpace\mgmt-itsc-hb-qlahp-core\QLAHP-web\src\main\webapp
        String realPath = request.getSession().getServletContext().getRealPath("");
    
        String filename = file.getOriginalFilename();     //上传文件名:qldb-release.apk
        String suffix = FilenameUtils.getExtension(filename); //文件扩展名:.apk
        String newName = UUID.randomUUID().toString().replaceAll("-", "") + "." + suffix;
    //    String PathName = "/WEB-INF/upload/" +newName;//文件的具体位置
        String PathName = "/upload/" +newName;//文件的具体位置
        String path = realPath+PathName;//存放文件的具体路径
        File newFile=new File(path);
        
        if(!newFile.exists()){
            newFile.mkdir();   //如果该目录不存在,就创建此抽象路径名指定的目录。
        }
        
        //通过CommonsMultipartFile的方法直接写文件(注意这个时候)
        file.transferTo(newFile);
        
        long size = file.getSize();//获取文件的字节大小,单位为byte
        
        String md5 = MD5Util.getMD5(newFile);
        
        AppVersionDo appVersionDo = new AppVersionDo();
        BeanUtils.copyProperties(appVersion, appVersionDo);
        appVersionDo.setAppMd5(md5);
        appVersionDo.setAppName(newName);//存到库里的app名称
        appVersionDo.setAppUrl(PathName);
        appVersionDo.setRemark(String.valueOf(size));
        int row = appVersionService.insertAppVersion(appVersionDo);
        
        if (0 >= row) {
            logger.error(RebackMessageEnum.Upload.getFailure());
            return ResponseHelper.buildFail(RebackMessageEnum.Upload.getFailure());
        }    
        
        return ResponseHelper.buildOk(RebackMessageEnum.Upload.getSuccess());
    }
    
    @RequestMapping("/fileDownLoad.apk")
    @ResponseBody
    public ResponseEntity<byte[]> fileDownLoadApp(HttpServletRequest request  ) throws Exception{
     
      ServletContext servletContext = request.getSession().getServletContext();
      logger.info("———AppUploadController————fileDownLoad.apk———————" + servletContext.toString());
      //全自动下载最新版本
      String fileName=null;

        AppVersionDo lastAppVersion = appVersionService.getLsstAppVersion();
        
        logger.info("———AppUploadController————lastAppVersion———————" + lastAppVersion.toString());
        if(null == lastAppVersion){
            return null;
        }
        fileName = lastAppVersion.getAppName();
        
        logger.info("———AppUploadController————fileName———————" + fileName);
//        String realPath = servletContext.getRealPath("/WEB-INF//upload/"+fileName);//得到文件所在位置
        String realPath = servletContext.getRealPath("/upload/"+fileName);//得到文件所在位置
        //TODO 服务器上地址
     //   String realPath = "http://qiluwms-jn-miniarch.sf-express.com/api/WEB-INF//upload/"+fileName;
      
      logger.info("———AppUploadController————realPath———————" + realPath);
        InputStream in=new FileInputStream(new File(realPath));//将该文件加入到输入流之中
         byte[] body=null;
         body=new byte[in.available()];// 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数
         in.read(body);//读入到输入流里面
        
        fileName=new String(fileName.getBytes("gbk"),"iso8859-1");//防止中文乱码
        logger.info("———AppUploadController————fileName———————" + fileName);
        HttpHeaders headers=new HttpHeaders();//设置响应头
        headers.add("Content-Disposition", "attachment;filename="+fileName);
        HttpStatus statusCode = HttpStatus.OK;//设置响应吗
        ResponseEntity<byte[]> response=new ResponseEntity<byte[]>(body, headers, statusCode);
        logger.info("———AppUploadController————body———————" + body);
        return response;

        //public ResponseEntity(T  body,
        //                       MultiValueMap < String,String > headers,
        //                       HttpStatus  statusCode)
        //HttpEntity使用给定的正文,标题和状态代码创建一个新的。
        //参数:
        //body - 实体机构
        //headers - 实体头
        //statusCode - 状态码
    }
    
    @ApiOperation(value = "App更新接口", notes = "返回true/false")
    @RequestMapping("getLastVersion")
    @ResponseBody
    public Response getAppVersion() {
        
        AppVersionDo lastAppVersion = appVersionService.getLsstAppVersion();
        
        if(null == lastAppVersion){
             return ResponseHelper.buildFail("已经是最新版本,无需再获取最新版本!");
        }
        
        //如果返回的版本号不是最新的,将最新的版本信息返回
        return ResponseHelper.buildOk(lastAppVersion);
    }
    
    @ApiOperation(value = "App删除", notes = "返回true/false")
    @RequestMapping("deleteAppVersionById")
    @ResponseBody
    public Response deleteAppVersion(@RequestBody AppVersionDo record, HttpServletRequest request) {
        if (null == record) {
            logger.debug("数据传输错误!");
            return ResponseHelper.buildFail("数据传输错误!");
        }
        if (null == record.getAppName()) {
            logger.debug("App名字不能为空!");
            return ResponseHelper.buildFail("数据传输错误!");
        }
        
        int sysResult = 0;
        Integer id = record.getId();//主键ID

        try {
            sysResult = appVersionService.deleteAppVersionById(id);
            if(sysResult == 1 ){
                // 删除对应的app包
                String    fileName = record.getAppName();
                ServletContext servletContext = request.getSession().getServletContext();
                //String realPath = servletContext.getRealPath("/WEB-INF//upload/"+fileName);//得到文件所在位置
                String realPath = servletContext.getRealPath("/upload/"+fileName);//得到文件所在位置
                File file =new File(realPath); //得到该文件的绝对路径
                file.delete();//删除文件;
            }

            if (0 >= sysResult) {
                logger.error(RebackMessageEnum.Delete.getFailure());
                return ResponseHelper.buildFail(RebackMessageEnum.Delete
                        .getFailure());
            }
        } catch (Exception e) {
            logger.error(RebackMessageEnum.Delete.getFailure(), e);
            return ResponseHelper.buildFail(RebackMessageEnum.Delete
                    .getFailure());
        }

        return ResponseHelper.buildOk(RebackMessageEnum.Delete.getSuccess());
    }
    
    

    
    

    @ApiOperation(value = "展示所有App版本列表---第二版本优化分页", notes = "查-集合")
    @RequestMapping("showAppVersionList")
    @ResponseBody
    public Response listByQuery(@RequestBody CommonConditionsQuery query) {
        if(query == null){
            logger.debug("数据传输错误!");
            return ResponseHelper.buildFail("数据传输错误!");
        }
        Integer pageNum = query.getCurrentPage();
        Integer pageSize = query.getPageSize();
        
        if (Objects.isNull(pageNum) || pageNum.intValue() == 0) {
            pageNum = 1;
        }
        if (Objects.isNull(pageSize) || pageSize.intValue() == 0) {
            pageSize = 0;
        }
        
        Map<String, Object> resultMap = new HashMap<>();
        try {
            Page<AppVersionDo> rowSet = PageHelper.startPage(pageNum, pageSize);
            List<AppVersionDo> data = appVersionService.listAppVersion(query);
            List<AppVersionDo> getTotal = appVersionService.listAppVersion(query);
            if(getTotal != null && getTotal.size()>0){
                resultMap.put("totalSize", getTotal.size());     //总条数
            }else{    
                resultMap.put("totalSize", 0);     //总条数
            }
            resultMap.put("firstPage", rowSet.getPageNum());// 第1页    
            resultMap.put("empty", null == data || data.isEmpty());
            resultMap.put("lastPage", rowSet.getPages());   //最后1页
            resultMap.put("pageBegin", rowSet.getStartRow());//每页的条数开始坐标
            resultMap.put("pageEnd", rowSet.getEndRow());     //每页的条数结束坐标
            resultMap.put("totalPage", rowSet.getPages()); //总页数
            resultMap.put("pageEnd", rowSet.getEndRow());    //每页的条数结束坐标
            resultMap.put("pageSize", rowSet.getPageSize());//每页显示的条数
            resultMap.put("list", rowSet);//返回的集合数据
        } catch (Exception e) {
            logger.error("根据查询条件获取数据出错!", e);
            return ResponseHelper.buildFail("查询异常");
        }
        return ResponseHelper.buildOk(resultMap);
    }
    
    
    
    
    
    
    @RequestMapping("addTest")
    @ResponseBody
    public Response add() throws IOException {
        
        String     newName = null;
        String     PathName = null;
        for (int i=1;i<=301; i++) {
         newName="app名称"+i;  
         PathName ="app路径"+i;
         
         AppVersionDo appVersionDo = new AppVersionDo();
         appVersionDo.setAppName(newName);//存到库里的app名称
         appVersionDo.setAppUrl(PathName);
         int row = appVersionService.insertAppVersion(appVersionDo);
         
         
         
        }
        
        return ResponseHelper.buildOk(RebackMessageEnum.Upload.getSuccess());
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值