New file |
| | |
| | | package com.dy.pipIrrGlobal.dyFile; |
| | | |
| | | import com.dy.common.util.NumUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.http.HttpEntity; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.util.LinkedMultiValueMap; |
| | | import org.springframework.util.MultiValueMap; |
| | | import org.springframework.web.client.RestTemplate; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | |
| | | @Component |
| | | public class FileOperate { |
| | | |
| | | @Autowired |
| | | private RestTemplate restTemplate ; |
| | | |
| | | /** |
| | | * 拆分上载文件的名称 |
| | | * @param file |
| | | * @return |
| | | */ |
| | | public String[] splitFileName(MultipartFile file){ |
| | | String[] grp = new String[2] ; |
| | | if(file != null) { |
| | | String fileName = file.getOriginalFilename(); |
| | | int lastDotIndex = fileName.lastIndexOf('.'); |
| | | if (lastDotIndex >= 0) { |
| | | grp[0] = fileName.substring(0, lastDotIndex); |
| | | grp[1] = fileName.substring(lastDotIndex + 1); |
| | | if(grp[0].trim().equals("")){ |
| | | grp[0] = "匿名" ; |
| | | } |
| | | } |
| | | } |
| | | return grp ; |
| | | } |
| | | |
| | | /** |
| | | * 得到上载的文件扩展名 |
| | | * @param file |
| | | * @return |
| | | */ |
| | | public String getFileExtName(MultipartFile file){ |
| | | String fileExtName = null ; |
| | | if(file != null) { |
| | | String filename = file.getOriginalFilename(); |
| | | int lastDotIndex = filename.lastIndexOf('.'); |
| | | if (lastDotIndex >= 0) { |
| | | fileExtName = filename.substring(lastDotIndex + 1); |
| | | } |
| | | } |
| | | return fileExtName ; |
| | | } |
| | | |
| | | /** |
| | | * 得到上载的文件主名 |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | | public String getFileMainName(String fileName){ |
| | | String fileMainName = null ; |
| | | if(fileName != null) { |
| | | int lastDotIndex = fileName.lastIndexOf('.'); |
| | | if (lastDotIndex >= 0) { |
| | | fileMainName = fileName.substring(0, lastDotIndex); |
| | | } |
| | | } |
| | | if(fileMainName == null){ |
| | | fileMainName = "noName" ; |
| | | } |
| | | return fileMainName ; |
| | | } |
| | | |
| | | /** |
| | | * 通过照片路径,得到对应缩略图的路径 |
| | | * @param filePath |
| | | * @return |
| | | */ |
| | | public String getFileZipPath(String filePath){ |
| | | String path_ = null ; |
| | | String prePath = null ; |
| | | String tailPath = null ; |
| | | if(filePath != null && !filePath.trim().equals("")) { |
| | | int lastDotIndex = filePath.lastIndexOf('.'); |
| | | if (lastDotIndex >= 0) { |
| | | prePath = filePath.substring(0, lastDotIndex); |
| | | tailPath = filePath.substring(lastDotIndex); |
| | | path_ = prePath + "_" + tailPath ; |
| | | } |
| | | } |
| | | if(path_ == null){ |
| | | path_ = filePath; |
| | | } |
| | | return path_ ; |
| | | } |
| | | |
| | | /** |
| | | * 通过视频路径,得到对应缩略图的路径 |
| | | * @param filePath |
| | | * @return |
| | | */ |
| | | public String getFileZipPath(String filePath, String extName){ |
| | | String path_ = null ; |
| | | String prePath = null ; |
| | | if(filePath != null && !filePath.trim().equals("")) { |
| | | int lastDotIndex = filePath.lastIndexOf('.'); |
| | | if (lastDotIndex >= 0) { |
| | | prePath = filePath.substring(0, lastDotIndex); |
| | | path_ = prePath + "_." + extName ; |
| | | } |
| | | } |
| | | if(path_ == null){ |
| | | path_ = filePath; |
| | | } |
| | | return path_ ; |
| | | } |
| | | |
| | | /** |
| | | * web分布式文件系统保存文件 |
| | | * @param file |
| | | * @param fmUrl |
| | | * @param fileCtrlRqMp |
| | | * @param fileMethodMp |
| | | * @param regionNum |
| | | * @param fileExtName |
| | | * @param json |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public FileRestVo saveFile(MultipartFile file, |
| | | String fmUrl, |
| | | String fileCtrlRqMp, |
| | | String fileMethodMp, |
| | | String regionNum, |
| | | String fileExtName, |
| | | String json) throws Exception{ |
| | | FileRestVo rvo = null ; |
| | | if(file != null && file.getBytes() != null && file.getBytes().length > 0){ |
| | | rvo = this.restCreateFileName(fmUrl, fileExtName) ; |
| | | if(rvo != null){ |
| | | String relativeFilePath = this.restSaveFile(fileCtrlRqMp, fileMethodMp, file, regionNum, json, rvo); |
| | | rvo.fileWebPath = relativeFilePath ; |
| | | //if(relativeFilePath != null){ |
| | | // rvo.createFilePath(relativeFilePath, rvo.fileNameHash); |
| | | //} |
| | | } |
| | | } |
| | | return rvo ; |
| | | } |
| | | |
| | | /** |
| | | * 生成文件名称 |
| | | * @return |
| | | */ |
| | | private FileRestVo restCreateFileName(String fmUrl, String fileExtName) throws Exception{ |
| | | // 准备请求数据 |
| | | MultiValueMap<String, Object> multipartRequestData = new LinkedMultiValueMap<>(); |
| | | multipartRequestData.add(FileConstant.fmPostMapping_create_paramName, fileExtName); |
| | | |
| | | // 设置请求头部,这里假设服务器接收multipart/form-data类型的数据 |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.setContentType(MediaType.MULTIPART_FORM_DATA); |
| | | |
| | | // 封装请求体 |
| | | HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(multipartRequestData, headers); |
| | | |
| | | String webUrl = fmUrl + "/" + FileConstant.fmRequestMapping + "/" + FileConstant.fmPostMapping_create; |
| | | // 发送POST请求 |
| | | FileRestVo rvo = restTemplate.postForObject(webUrl, requestEntity, FileRestVo.class); |
| | | |
| | | return rvo ; |
| | | } |
| | | |
| | | /** |
| | | * 把文件存储到文件系统中 |
| | | * @param file |
| | | * @param regionNum |
| | | * @param json json数据 |
| | | * @param rvo |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | private String restSaveFile(String fileCtrlRqMp, |
| | | String fileMethodMp, |
| | | MultipartFile file, |
| | | String regionNum, |
| | | String json, |
| | | FileRestVo rvo) throws Exception{ |
| | | // 准备请求数据 |
| | | MultiValueMap<String, Object> multipartRequestData = new LinkedMultiValueMap<>(); |
| | | multipartRequestData.add(FileConstant.filePostMapping_paramName_file, file.getResource()); |
| | | multipartRequestData.add(FileConstant.filePostMapping_paramName_regionNum, regionNum); |
| | | multipartRequestData.add(FileConstant.filePostMapping_paramName_json, (json==null?"":json)); |
| | | multipartRequestData.add(FileConstant.filePostMapping_paramName_absolutePath, rvo.fileSysAbsolutePath); |
| | | multipartRequestData.add(FileConstant.filePostMapping_paramName_relativePath, rvo.fileSysRelativePath); |
| | | multipartRequestData.add(FileConstant.filePostMapping_paramName_fileName, rvo.fileName); |
| | | |
| | | // 设置请求头部,这里假设服务器接收multipart/form-data类型的数据 |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.setContentType(MediaType.MULTIPART_FORM_DATA); |
| | | //headers.setContentLength(file.getSize()); |
| | | |
| | | // 封装请求体 |
| | | HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(multipartRequestData, headers); |
| | | |
| | | String fileRestUrl = rvo.fileSysRestUrl ; |
| | | if(!fileRestUrl.endsWith("/") && !fileRestUrl.endsWith("\\\\")){ |
| | | fileRestUrl += "/" ; |
| | | } |
| | | fileRestUrl += (fileCtrlRqMp + "/" + fileMethodMp) ; |
| | | |
| | | // 发送POST请求 |
| | | return restTemplate.postForObject(fileRestUrl, requestEntity, Object.class).toString(); |
| | | } |
| | | |
| | | /** |
| | | * 解析文件名称 |
| | | * @param fmUrl |
| | | * @param filePath |
| | | * @return |
| | | */ |
| | | public FileRestVo parse(String fmUrl, String filePath){ |
| | | // 准备请求数据 |
| | | MultiValueMap<String, Object> multipartRequestData = new LinkedMultiValueMap<>(); |
| | | multipartRequestData.add(FileConstant.fmPostMapping_parsePath_paramName, filePath); |
| | | |
| | | // 设置请求头部,这里假设服务器接收multipart/form-data类型的数据 |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.setContentType(MediaType.MULTIPART_FORM_DATA); |
| | | |
| | | // 封装请求体 |
| | | HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(multipartRequestData, headers); |
| | | |
| | | String webUrl = fmUrl + "/" + FileConstant.fmRequestMapping + "/" + FileConstant.fmPostMapping_parsePath; |
| | | // 发送POST请求 |
| | | FileRestVo rvo = restTemplate.postForObject(webUrl, requestEntity, FileRestVo.class); |
| | | |
| | | return rvo ; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 解析文件名称 |
| | | * @param fmUrl |
| | | * @param filePaths |
| | | * @return |
| | | */ |
| | | public List<FileRestVo> parse(String fmUrl, List<String> filePaths) throws Exception{ |
| | | List<FileRestVo> rList = null ; |
| | | if(filePaths != null && filePaths.size() > 0) { |
| | | MultiValueMap<String, Object> multipartRequestData = new LinkedMultiValueMap<>(); |
| | | multipartRequestData.add(FileConstant.fmPostMapping_parsePathList_paramName, filePaths); |
| | | |
| | | // 设置请求头部,这里假设服务器接收multipart/form-data类型的数据 |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.setContentType(MediaType.MULTIPART_FORM_DATA); |
| | | |
| | | // 封装请求体 |
| | | HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(multipartRequestData, headers); |
| | | |
| | | String webUrl = fmUrl + "/" + FileConstant.fmRequestMapping + "/" + FileConstant.fmPostMapping_parsePathList; |
| | | // 发送POST请求 |
| | | FileRestVo[] rvos = restTemplate.postForObject(webUrl, requestEntity, FileRestVo[].class); |
| | | rList = Arrays.asList(rvos) ; |
| | | } |
| | | return rList ; |
| | | } |
| | | |
| | | /** |
| | | * 解析文件哈希值 |
| | | * @param fmUrl |
| | | * @param hashcode |
| | | * @return |
| | | */ |
| | | public FileRestVo parseHashcode(String fmUrl, Integer hashcode){ |
| | | // 准备请求数据 |
| | | MultiValueMap<String, Object> multipartRequestData = new LinkedMultiValueMap<>(); |
| | | multipartRequestData.add(FileConstant.fmPostMapping_parseHashcode_paramName, hashcode); |
| | | |
| | | // 设置请求头部,这里假设服务器接收multipart/form-data类型的数据 |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.setContentType(MediaType.MULTIPART_FORM_DATA); |
| | | |
| | | // 封装请求体 |
| | | HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(multipartRequestData, headers); |
| | | |
| | | String webUrl = fmUrl + "/" + FileConstant.fmRequestMapping + "/" + FileConstant.fmPostMapping_parseHashcode; |
| | | // 发送POST请求 |
| | | FileRestVo rvo = restTemplate.postForObject(webUrl, requestEntity, FileRestVo.class); |
| | | |
| | | return rvo ; |
| | | } |
| | | |
| | | /** |
| | | * 解析文件哈希值 |
| | | * @param fmUrl |
| | | * @param hashCodes |
| | | * @return |
| | | */ |
| | | public List<FileRestVo> parseHashcode(String fmUrl, List<Integer> hashCodes){ |
| | | List<FileRestVo> rList = null ; |
| | | if(hashCodes != null && hashCodes.size() > 0) { |
| | | // 准备请求数据 |
| | | MultiValueMap<String, Object> multipartRequestData = new LinkedMultiValueMap<>(); |
| | | multipartRequestData.add(FileConstant.fmPostMapping_parseHashcodeList_paramName, hashCodes); |
| | | |
| | | // 设置请求头部,这里假设服务器接收multipart/form-data类型的数据 |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.setContentType(MediaType.MULTIPART_FORM_DATA); |
| | | |
| | | // 封装请求体 |
| | | HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(multipartRequestData, headers); |
| | | |
| | | String webUrl = fmUrl + "/" + FileConstant.fmRequestMapping + "/" + FileConstant.fmPostMapping_parseHashcodeList; |
| | | // 发送POST请求 |
| | | FileRestVo[] rvos = restTemplate.postForObject(webUrl, requestEntity, FileRestVo[].class); |
| | | rList = Arrays.asList(rvos) ; |
| | | } |
| | | return rList ; |
| | | } |
| | | |
| | | /** |
| | | * 解析文件文件路径中的哈希值并返回图片完整路径 |
| | | * @param fmUrl |
| | | * @param filePath |
| | | * @return |
| | | */ |
| | | public String getFilePath(String fmUrl, String filePath){ |
| | | FileRestVo rvo = null ; |
| | | if(filePath != null && !filePath.trim().equals("")){ |
| | | String[] strs = filePath.split("\\?") ; |
| | | String hashValStr = strs[strs.length - 1] ; |
| | | if(hashValStr != null && !hashValStr.trim().equals("") && NumUtil.isPlusIntNumber(hashValStr)){ |
| | | int hashVal = Integer.valueOf(hashValStr) ; |
| | | rvo = parseHashcode(fmUrl, hashVal) ; |
| | | } |
| | | } |
| | | if(rvo != null){ |
| | | return rvo.getFileWebUrl() + filePath ; |
| | | } |
| | | return null ; |
| | | } |
| | | |
| | | } |