Service 方法
public List<Map<String,Object>> handleMultipartRequest(String fileGuid, MultipartRequest request, HttpServletRequest httpServletRequest) throws Exception {
List<Map<String, Object>> uploadFileList=new ArrayList<Map<String,Object>>();
Set<Entry<String, List<MultipartFile>>> params = request.getMultiFileMap().entrySet();
if(StringUtils.isEmpty(fileGuid)) {
fileGuid=guidGeneratorUtil.getUUID();
}
for(Entry<String, List<MultipartFile>> param : params) {
for(MultipartFile file: param.getValue()) {
if(StringUtils.isEmpty(file.getOriginalFilename())) {
logger.info("key=uploadfile File OriginalFilename is Empty.");
continue;
}
Map<String, Object> fileMap= handleMultipartFile(file);
fileMap.put("FileGuid", fileGuid);
fileUploadDataDao.insertFileUploadData(fileMap);
uploadFileList.add(fileMap);
}
}
return uploadFileList;
}
public Map<String, Object> handleMultipartFile(MultipartFile file) throws Exception{
Map<String, Object> rMap=new HashMap<>();
String msg = null;
String extensionName=getExtensionName(file.getOriginalFilename());
if(!checkFileExtensionName(extensionName)) {
msg = String.format("key=uploadfile FileExtensionName:%s 文件後綴錯誤", extensionName);
//logger.error(msg);
throw new Exception(msg);
}
String fileId=guidGeneratorUtil.getFileId();
rMap.put("FileId", fileId);
StringBuilder fileSB=new StringBuilder();
DateFormat dFormat=new SimpleDateFormat("yyyyMMdd");
Date date =new Date();
fileSB.append(uploadPath+dFormat.format(date));
File destParnetFile=new File(fileSB.toString());
if(!destParnetFile.exists()) {
destParnetFile.mkdirs(); //如果目錄不存在,則創建
}
File dest=new File(fileSB.toString(), fileId);
try {
file.transferTo(dest); //保存文件到本地磁盤
} catch (IllegalStateException | IOException e) {
msg=String.format("key=uploadfile %s", e.getMessage());
//logger.error(msg);
throw new Exception(msg);
}
rMap.put("FilePath", fileSB.toString());
rMap.put("FileName", file.getOriginalFilename());
rMap.put("FileType", extensionName);
rMap.put("FileSize", file.getSize());
return rMap;
}
/**
* @param fileName
* @return
*/
public String getExtensionName(String fileName) {
String extensionName="";
if(StringUtils.isEmpty(fileName)) {
return extensionName;
}
int startIndex=fileName.indexOf(".");
extensionName=fileName.substring(startIndex+1);
return extensionName;
}
/**
* @param extensionName 文件擴展名稱
* @return 返回true可以上傳,返回false不可以上傳
*/
private Boolean checkFileExtensionName(String extensionName) {
boolean flag=false;
if(StringUtils.isEmpty(extensionName)) {
return flag;
}
String[] appExtArr=StringUtils.tokenizeToStringArray(appExtStr, ",");
for (String m : appExtArr) {
if(extensionName.equals(m)) {
flag=true;
break;
}
}
return flag;
}
public List<Map<String, Object>> getFileUploadDataList(Map<String, Object> map){
List<Map<String, Object>> rList = new ArrayList<>();
rList=fileUploadDataDao.getFileUploadDataList(map);
return rList;
}
public int getFileUploadDataListCnt(Map<String, Object> map) {
int result=0;
result = fileUploadDataDao.getFileUploadDataListCnt(map);
return result;
}
public File getUploadFile(Map<String, Object> map) throws Exception {
Map<String, Object> fileMap= fileUploadDataDao.getFileUploadData(map).get(0);
if(fileMap == null || fileMap.size() <=0) {
throw new Exception("file data does not exist.");
}
StringBuilder sb = new StringBuilder();
sb.append(fileMap.get("FilePath"));
sb.append("/");
sb.append(fileMap.get("FileId"));
return new File(sb.toString());
}
SQL腳本
<select id="getFileUploadDataList" parameterType="java.util.Map"
resultType="java.util.Map">
<include refid="paging.pagingPreSQL" />
select ROW_NUMBER() over(order by Number desc )
rownum,[Number]
,[FileGuid]
,[FileId]
,[FilePath]
,[FileName]
,[FileType]
,[FileSize]
,[CreateTime]
from AA_FileUploadData
where 1=1
<if test="FileGuid !=null and FileGuid !='' ">
AND FileGuid= #{FileGuid}
</if>
<if test="FileId !=null and FileId !='' ">
AND FileId= #{FileId}
</if>
<include refid="paging.pagingPostSQL" />
</select>
<insert id="insertFileUploadData" parameterType="java.util.Map">
<selectKey resultType="int" keyProperty="Number" order="AFTER">
select
@@IDENTITY as id
</selectKey>
INSERT INTO [dbo].[AA_FileUploadData]
([FileGuid]
,[FileId]
,[FilePath]
,[FileName]
,[FileType]
,[FileSize]
,[CreateTime])
VALUES
(
#{FileGuid},
#{FileId},
#{FilePath},
#{FileName},
#{FileType},
#{FileSize},
GetDate()
)
</insert>
分頁抽象
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="paging">
<!-- 패이징을 위한 샘플 QUERY 입니다..업무에 맞게 수정하셔서 사용 바랍니다.. -->
<sql id="pagingPreSQL">
SELECT * FROM (
SELECT ROWNUM AS "ROWNUMBER" , AA.* FROM (
</sql>
<sql id="pagingPostSQL">
) AA ) AAA
<![CDATA[
WHERE AAA.ROWNUMBER >= #{firstRowIndex} AND AAA.ROWNUMBER <= #{lastRowIndex}
]]>
</sql>
<sql id="pagingPreSqlOverCount">
SELECT FLOOR((AA.totalCount-1)/#{rowPerPage})+1 totalPage , AA.* FROM (
SELECT COUNT(*) OVER() totalCount, ROWNUM ROWNUMBER,MAINSQL.* FROM
(
</sql>
<sql id="pagingPostSqlOverCount">
) MAINSQL
<![CDATA[ ) AA WHERE ROWNUMBER>=((#{pageNo}-1)*#{rowPerPage})+1 AND ROWNUMBER <= (((#{pageNo}-1)*#{rowPerPage})+1) + #{rowPerPage}-1 ]]>
</sql>