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