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