1. 程式人生 > >Spring MVC 文件上傳與下載2及分頁功能

Spring MVC 文件上傳與下載2及分頁功能

orm val load number floor 錯誤 tran bject boolean

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>

固定字符串註解
@Value("${file.extension.approve.list}")
/mapper>
固定字符串註解
@Value("${file.extension.approve.list}")
configuration.properties 屬性文件
file.extension.approve.list=dat,doc,docx,xlsx,xls,ppt,pptx,txt,gif,jpg,png,pdf,bmp,zip
file.upload.path.localhost=F:/sprout/upload/
applicationContent.xml文件引入屬性文件配置

Spring MVC 文件上傳與下載2及分頁功能