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.UUID;

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

import org.apache.commons.fileupload.disk.DiskFileItem;
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.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import com.sf.QLAHP.domain.AppVersionDo;
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;

**************************************************************************************


    /*
     * 采用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 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);//0dc83e83fd539d04cd60caed4cacc3b5
        appVersionDo.setAppName(newName);//存到库里的app名称

      //  /WEB-INF//upload/67c01b1b6d954338a57629dae08a0478.xlsx
        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")
    public ResponseEntity<byte[]> fileDownLoadTest(HttpServletRequest request  ) throws Exception{
     
      ServletContext servletContext = request.getSession().getServletContext();
      //全自动下载最新版本
      String fileName=null;

        AppVersionDo lastAppVersion = appVersionService.getLsstAppVersion();
        if(null == lastAppVersion){
            return null;
        }
        fileName = lastAppVersion.getAppName();
        
      String realPath = servletContext.getRealPath("/WEB-INF//upload/"+fileName);//得到文件所在位置
        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");//防止中文乱码
        HttpHeaders headers=new HttpHeaders();//设置响应头
        headers.add("Content-Disposition", "attachment;filename="+fileName);
        HttpStatus statusCode = HttpStatus.OK;//设置响应吗
        ResponseEntity<byte[]> response=new ResponseEntity<byte[]>(body, headers, statusCode);
        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);//得到文件所在位置
                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删除-------test----------------", notes = "返回true/false")
    @RequestMapping("deleteAppVersionTest")
    @ResponseBody
    public Response deleteAppVersionTest(HttpServletRequest request) {
        
        int sysResult = 0;
        Integer id = 1;//主键ID

        try {
            sysResult = appVersionService.deleteAppVersionById(id);
            // 删除对应的app包
              String    fileName = "qldb-release.apk";
              ServletContext servletContext = request.getSession().getServletContext();
              String realPath = servletContext.getRealPath("/WEB-INF//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());
    }

 
       

______________________________________________________________________


   // @RequestMapping("/fileDownLoad") @@@@普通文件下载
    @RequestMapping("/fileDownLoad.apk") //app端下载的名字,必须加后缀.apk
    public ResponseEntity<byte[]> fileDownLoadTest(HttpServletRequest request  ) throws Exception{
     
      ServletContext servletContext = request.getSession().getServletContext();
      //全自动下载最新版本
      String fileName=null;

        AppVersionDo lastAppVersion = appVersionService.getLsstAppVersion();
        if(null == lastAppVersion){
            return null;
        }
        fileName = lastAppVersion.getAppName();
        
      String realPath = servletContext.getRealPath("/WEB-INF//upload/"+fileName);//得到文件所在位置
        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");//防止中文乱码
        HttpHeaders headers=new HttpHeaders();//设置响应头
        headers.add("Content-Disposition", "attachment;filename="+fileName);
        HttpStatus statusCode = HttpStatus.OK;//设置响应吗
        ResponseEntity<byte[]> response=new ResponseEntity<byte[]>(body, headers, statusCode);
        return response;

        //public ResponseEntity(T  body,
        //                       MultiValueMap < String,String > headers,
        //                       HttpStatus  statusCode)
        //HttpEntity使用给定的正文,标题和状态代码创建一个新的。
        //参数:
        //body - 实体机构
        //headers - 实体头
        //statusCode - 状态码
    }

-----------------------------------------------------------------------------------------------------------------------------------------------

    @RequestMapping("fileUploadTest")
    public String  fileUploadTest(HttpServletRequest request) throws IOException {
        //1、获取项目的绝对路径
        String realPath2 = request.getSession().getServletContext().getRealPath("");
        System.out.println("realPath2:\t"+realPath2);//D:\eclipseWorkSpace\mgmt-itsc-hb-qlahp-core\QLAHP-web\src\main\webapp
        //3、获取当前文件的绝对路径
        String realPath = request.getSession().getServletContext().getRealPath(request.getRequestURI());
        System.out.println("realPath=\t"+realPath);//D:\eclipseWorkSpace\mgmt-itsc-hb-qlahp-core\QLAHP-web\src\main\webapp\dispatch\fileUploadTest
        return "6666666666";
    }

猜你喜欢

转载自blog.csdn.net/chai1230/article/details/82493258