Commit 5615f0ac authored by hanfeng's avatar hanfeng

峰会图片压缩包上传

parent 126e6cc6
...@@ -98,4 +98,9 @@ public class RedisKey { ...@@ -98,4 +98,9 @@ public class RedisKey {
public static final String CACHE_DICTIONARY_ALL =CACHE_DICTIONARY_PREFIX + "all:"; public static final String CACHE_DICTIONARY_ALL =CACHE_DICTIONARY_PREFIX + "all:";
public static final String CACHE_DICTIONARY_ALL_MAP =CACHE_DICTIONARY_ALL + "map:"; public static final String CACHE_DICTIONARY_ALL_MAP =CACHE_DICTIONARY_ALL + "map:";
public static final String ILLEGAL_VEHICLE_ENQUIRIES ="cache:violation"; public static final String ILLEGAL_VEHICLE_ENQUIRIES ="cache:violation";
/**
* 服务器上传压缩包文件序号
*/
public static final String UPLOAD_ZIP_NO_PREFIX ="upload:zip:no:";
} }
...@@ -183,9 +183,9 @@ public class UploadController{ ...@@ -183,9 +183,9 @@ public class UploadController{
@PostMapping(value="/app/unauth/pictureZip") @PostMapping(value="/app/unauth/pictureZip")
public ObjectRestResponse pictureZip( public ObjectRestResponse pictureZip(
@RequestBody MultipartFile file, @RequestParam("file")MultipartFile file,
@RequestBody String password) throws Exception { @RequestParam(value = "prefix",defaultValue = "summit")String prefix) throws Exception {
return uploadZipService.uploadPictureZip(file,password); return uploadZipService.uploadPictureZip(file,prefix);
} }
} }
...@@ -7,5 +7,5 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -7,5 +7,5 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
public interface UploadZipService { public interface UploadZipService {
ObjectRestResponse uploadPictureZip(MultipartFile file, String password) throws IOException; ObjectRestResponse uploadPictureZip(MultipartFile file, String prefix) throws IOException;
} }
package com.xxfc.platform.universal.service.impl; package com.xxfc.platform.universal.service.impl;
import com.alibaba.druid.sql.visitor.functions.If;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import com.xxfc.platform.universal.constant.RedisKey;
import com.xxfc.platform.universal.constant.enumerate.FileTypeEnum; import com.xxfc.platform.universal.constant.enumerate.FileTypeEnum;
import com.xxfc.platform.universal.service.UploadZipService; import com.xxfc.platform.universal.service.UploadZipService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.codehaus.plexus.util.IOUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.*; import java.io.*;
import java.nio.charset.Charset;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
...@@ -22,60 +29,74 @@ public class UploadZipServiceImpl implements UploadZipService { ...@@ -22,60 +29,74 @@ public class UploadZipServiceImpl implements UploadZipService {
@Value("${universal.uploadPath}") @Value("${universal.uploadPath}")
private String uploadPath ; private String uploadPath ;
@Value("${universal.url}") @Value("${universal.url}")
private String xx_url ; private String xx_url ;
@Value("${photo.format}")
private static final String APK_SUFFIX=".apk"; private String PHOTO_FORMAT=".png/.jpg/.git/.bmp";
private static final String APK_NAME="xxfc.apk"; @Autowired
private static final String JPG=".jpg"; RedisTemplate redisTemplate;
private static final String PNG=".png";
@Override @Override
public ObjectRestResponse uploadPictureZip(MultipartFile file, String password) throws IOException { public ObjectRestResponse uploadPictureZip(MultipartFile uFile, String prefix) throws IOException {
if (Objects.isNull(file)) { if (Objects.isNull(uFile)) {
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"请上传压缩文件!"); return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"请上传压缩文件!");
} }
String fileContentType = uFile.getContentType();
String fileContentType = file.getContentType();
//将压缩包保存在指定路径 //将压缩包保存在指定路径
String packFilePath = uploadPath + File.separator + file.getName(); String packFilePath = uploadPath + File.separator + uFile.getName();
if (FileTypeEnum.FILE_TYPE_ZIP.type.equals(fileContentType)||FileTypeEnum.FILE_TYPE_X_ZIP.type.equals(fileContentType)) { if (FileTypeEnum.FILE_TYPE_ZIP.type.equals(fileContentType)||FileTypeEnum.FILE_TYPE_X_ZIP.type.equals(fileContentType)) {
//zip解压缩处理 //zip解压缩处理
packFilePath += FileTypeEnum.FILE_TYPE_ZIP.fileStufix; packFilePath += FileTypeEnum.FILE_TYPE_ZIP.fileStufix;
} else { } else {
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"上传的压缩包格式不正确,仅支持zip压缩文件!"); return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"上传的压缩包格式不正确,仅支持zip压缩文件!");
} }
File fi = new File(packFilePath); File file = new File(packFilePath);
try { try {
file.transferTo(fi); //保存压缩包
FileOutputStream os = new FileOutputStream(file);
IOUtil.copy(uFile.getInputStream(),os);
os.close();
} catch (IOException e) { } catch (IOException e) {
log.error("zip file save to " + uploadPath + " error", e.getMessage(), e); log.error("zip file save to " + uploadPath + " error", e.getMessage(), e);
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"保存压缩文件到:" + uploadPath + " 失败!"); return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"保存压缩文件到:" + uploadPath + " 失败!");
} }
//zip压缩包 //zip压缩包解压
return unPackZip(fi, password, uploadPath); return unPackZip(file, prefix);
} }
public ObjectRestResponse unPackZip(File file, String password, String destPath) throws IOException { public ObjectRestResponse<String> unPackZip(File file, String prefix) throws IOException {
ZipFile zipFile = new ZipFile(file); ZipFile zipFile = new ZipFile(file, Charset.forName("GBK"));
Enumeration<? extends ZipEntry> entries = zipFile.entries(); Enumeration<? extends ZipEntry> entries = zipFile.entries();
long millis = System.currentTimeMillis();
String dirPathToday = prefix+ File.separator + millis;
String redisNoKey = RedisKey.UPLOAD_FILE_NO_PREFIX +millis;
StringBuffer result = new StringBuffer();
Integer index = 0;
while (entries.hasMoreElements()) { while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement(); ZipEntry entry = entries.nextElement();
if (entry.isDirectory()) { if (entry.isDirectory() && index++ == 0) {
destPath =destPath+File.separator+ entry.getName(); File dir = new File(uploadPath+dirPathToday);
File dir = new File(destPath);
dir.mkdir(); dir.mkdir();
}else { } else if (!entry.isDirectory()) {
File targetFile = new File(destPath+File.separator+entry.getName());
if (targetFile.getParentFile().exists()){
Long no = redisTemplate.opsForValue().increment(redisNoKey);
if(no.equals(1l)){
redisTemplate.expire(redisNoKey,1, TimeUnit.DAYS);
} }
String name = entry.getName();
String format = name.substring(name.lastIndexOf("."));
if (PHOTO_FORMAT.contains(format)) {
String realFileRelPath = dirPathToday + File.separator + no +format;
File targetFile = new File(uploadPath+realFileRelPath);
FileUtils.copyInputStreamToFile(zipFile.getInputStream(entry),targetFile);
realFileRelPath=xx_url+ SystemConfig.XXMP_URL+realFileRelPath;
result.append(realFileRelPath+",");
} }
} }
}
return null; return ObjectRestResponse.succ(result.substring(0, result.length()-1));
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment