Commit a64f5e1f authored by 赵啸非's avatar 赵啸非

添加文件压缩

parent af27b65d
package com.mortals.xhx.base.framework;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import org.springframework.util.ObjectUtils;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author: zxfei
* @date: 2022/6/30 10:49
* @description:
**/
public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = jp.getText();
if (!ObjectUtils.isEmpty(date)) {
try {
return format.parse(date);
} catch (ParseException e) {
return null;
}
} else {
return null;
}
}
}
......@@ -2,6 +2,7 @@ package com.mortals.xhx.base.system.upload.service.impl;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.service.IUser;
import com.mortals.framework.util.StringUtils;
......@@ -43,7 +44,6 @@ public class UploadServiceImpl implements UploadService {
private String filePath;
@Override
public String saveFileUpload(MultipartFile tempFile, String prePath, IUser user) {
if (tempFile == null || tempFile.getSize() == 0) {
......@@ -70,7 +70,7 @@ public class UploadServiceImpl implements UploadService {
File uploadFile = new File(filePathAll);
try {
log.info("文件正在储存,filepath:"+filePathAll);
log.info("文件正在储存,filepath:" + filePathAll);
tempFile.transferTo(uploadFile);
} catch (Exception e) {
throw new AppException(e.getMessage());
......@@ -81,7 +81,10 @@ public class UploadServiceImpl implements UploadService {
@Override
public String getFilePath(String path) {
String filePath = this.filePath.endsWith("/") ? this.filePath : this.filePath + "/";
// xxx/xxx/
String filePath = StrUtil.appendIfMissing(this.filePath, "/");
path =StrUtil.removePrefix(path, "/");
StrUtil.prependIfMissing(path, "/", "/");
return filePath + path;
}
......@@ -101,7 +104,7 @@ public class UploadServiceImpl implements UploadService {
@Override
public void preview(String fileName, HttpServletResponse response) {
String filePath = this.filePath+"/file/preview/" + fileName;
String filePath = this.filePath + "/file/preview/" + fileName;
try {
response.setContentType(MediaType.IMAGE_JPEG_VALUE);
setAttachmentResponseHeader(response, fileName);
......@@ -115,12 +118,11 @@ public class UploadServiceImpl implements UploadService {
/**
* 下载文件名重新编码
*
* @param response 响应对象
* @param response 响应对象
* @param realFileName 真实文件名
* @return
*/
public void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException
{
public void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException {
String percentEncodedFileName = percentEncode(realFileName);
StringBuilder contentDispositionValue = new StringBuilder();
......@@ -140,8 +142,7 @@ public class UploadServiceImpl implements UploadService {
* @param s 需要百分号编码的字符串
* @return 百分号编码后的字符串
*/
public String percentEncode(String s) throws UnsupportedEncodingException
{
public String percentEncode(String s) throws UnsupportedEncodingException {
String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString());
return encode.replaceAll("\\+", "%20");
}
......@@ -149,7 +150,7 @@ public class UploadServiceImpl implements UploadService {
@Override
public void uploadDownload(String fileName, HttpServletResponse response) {
String filePath = this.filePath+ fileName;
String filePath = this.filePath + fileName;
try {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
setAttachmentResponseHeader(response, fileName);
......@@ -161,7 +162,7 @@ public class UploadServiceImpl implements UploadService {
@Override
public void deleteFile(String fileName) {
String filePath = this.filePath+ fileName;
String filePath = this.filePath + fileName;
try {
FileUtil.del(filePath);
} catch (Exception e) {
......
......@@ -19,14 +19,13 @@ public class SkinBaseVo extends BaseEntityLong {
private String productCode;
private String imageResolutionValue;
private String serverName;
private Integer serverPort;
/** 属性列表 */
private List<SkinFieldEntity> skinFieldList;
private String localZipPath;
}
\ No newline at end of file
package com.mortals.xhx.module.skin.service;
import com.mortals.framework.common.Rest;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.skin.model.SkinBaseEntity;
/**
* SkinBaseService
*
......@@ -11,4 +14,10 @@ import com.mortals.xhx.module.skin.model.SkinBaseEntity;
*/
public interface SkinBaseService extends ICRUDService<SkinBaseEntity,Long>{
Rest<byte[]> compressSkinZip(SkinBaseEntity query,Context context);
Rest<Void> updateResourcePath(SkinBaseEntity query,Context context);
}
\ No newline at end of file
package com.mortals.xhx.module.skin.service.impl;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.net.URLDecoder;
import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ZipUtil;
import com.mortals.framework.ap.GlobalSysInfo;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.PageInfo;
......@@ -34,6 +37,7 @@ import freemarker.template.Template;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
......@@ -43,11 +47,16 @@ import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import java.io.*;
import java.nio.file.CopyOption;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
/**
......@@ -119,7 +128,6 @@ public class SkinBaseServiceImpl extends AbstractCRUDServiceImpl<SkinBaseDao, Sk
item.setSkinFieldList(skinFieldEntities);
if (!ObjectUtils.isEmpty(item.getPreviewImagePath())) {
// UrlBuilder builder = UrlBuilder.ofHttp(domainUrl, CharsetUtil.CHARSET_UTF_8).addPath(item.getPreviewImagePath());
String fieldUrl = String.format("%s%s", domainUrl, StrUtil.prependIfMissing(item.getPreviewImagePath(), "/", "/"));
// item.setPreviewImagePath(builder.build());
item.setPreviewImagePath(fieldUrl);
......@@ -203,11 +211,11 @@ public class SkinBaseServiceImpl extends AbstractCRUDServiceImpl<SkinBaseDao, Sk
SkinFieldEntity skinFieldEntity = new SkinFieldEntity();
BeanUtils.copyProperties(field, skinFieldEntity, BeanUtil.getNullPropertyNames(field));
if("2".equals(skinFieldEntity.getFieldType())){
if ("2".equals(skinFieldEntity.getFieldType())) {
String result = StrUtil.prependIfMissing(skinFieldEntity.getFieldValue(), "/", "/");
skinFieldEntity.setFieldValue(result);
}
// updateUrl(skinFieldEntity);
// updateUrl(skinFieldEntity);
return skinFieldEntity;
}).collect(Collectors.toList());
......@@ -291,15 +299,108 @@ public class SkinBaseServiceImpl extends AbstractCRUDServiceImpl<SkinBaseDao, Sk
}
/**
* 临时方法 归类下载
* @param context
* @return
*/
@Override
public Rest<byte[]> compressSkinZip(SkinBaseEntity query,Context context) {
String sourcePathZip = uploadService.getFilePath(query.getLocalZipPath());
File zipFile = new File(sourcePathZip);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(outputStream);
//查询所有
List<SkinBaseEntity> skinBaseEntities = this.find(new SkinBaseEntity());
for (SkinBaseEntity skinBaseEntity : skinBaseEntities) {
String cssFilePath = skinBaseEntity.getCssFilePath();
String filePath = uploadService.getFilePath(cssFilePath);
File file = new File(filePath);
if (!file.exists()) {
continue;
}
ZipUtil.append(zipFile.toPath(), file.toPath(), StandardCopyOption.REPLACE_EXISTING);
/*
try {
zip.putNextEntry(new ZipEntry(filePath));
zip.flush();
zip.closeEntry();
} catch (IOException e) {
}*/
}
/* IOUtils.closeQuietly(zip);
File downloadFile = new File("/home/css.zip");
FileUtil.writeToStream(downloadFile, outputStream);*/
byte[] bytes = FileUtil.readBytes(zipFile);
return Rest.ok(bytes);
}
/**
* 刷新所有资源路径,补全/
*
* @param context
* @return
*/
@Override
public Rest<Void> updateResourcePath(SkinBaseEntity query,Context context) {
List<SkinBaseEntity> skinBaseEntities = this.find(new SkinBaseEntity());
for (SkinBaseEntity skinBaseEntity : skinBaseEntities) {
skinBaseEntity.setCssFilePath(StrUtil.appendIfMissing(skinBaseEntity.getCssFilePath(), "/"));
skinBaseEntity.setPreviewImagePath(StrUtil.appendIfMissing(skinBaseEntity.getPreviewImagePath(), "/"));
}
this.update(skinBaseEntities, context);
SkinFieldEntity skinFieldQuery = new SkinFieldEntity();
skinFieldQuery.setFieldType("2");
List<SkinFieldEntity> skinFieldEntities = skinFieldService.find(skinFieldQuery);
for (SkinFieldEntity skinFieldEntity : skinFieldEntities) {
skinFieldEntity.setFieldValue(StrUtil.appendIfMissing(skinFieldEntity.getFieldValue(), "/"));
}
skinFieldService.update(skinFieldEntities, context);
return Rest.ok();
}
public static void main(String[] args) {
String str = "/file/upload/12332.png";
/* String str = "/file/upload/12332.png";
String result = StrUtil.prependIfMissing(str, "/", "/");
System.out.println(result);
System.out.println(result);*/
String str = "/file/upload/12332.png";
}
String s = StrUtil.replaceFirst(str, "/file/upload/", "/file/upload/abc/");
System.out.println(s);
/*
File appendFile = new File("E:\\pic");
File zipFile = new File("F:\\1.zip");
//CopyOption copyOption = new CopyOption();
ZipUtil.append(zipFile.toPath(), appendFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
*/
// ZipUtil.zip("F:\\1.zip");
/* File file = new File("F:\\1.zip");
ZipFile zipFile = ZipUtil.toZipFile(file, null);*/
//zipFile.
}
}
\ No newline at end of file
......@@ -9,6 +9,8 @@ import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.ap.GlobalSysInfo;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.framework.util.DataUtil;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService;
......@@ -16,10 +18,12 @@ import com.mortals.xhx.common.key.Constant;
import com.mortals.xhx.module.product.model.ProductEntity;
import com.mortals.xhx.module.product.model.ProductQuery;
import com.mortals.xhx.module.product.service.ProductService;
import com.mortals.xhx.module.site.model.SiteBusinessEntity;
import com.mortals.xhx.module.skin.model.SkinFieldEntity;
import com.mortals.xhx.module.skin.model.SkinFieldQuery;
import com.mortals.xhx.module.skin.service.SkinFieldService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -37,6 +41,7 @@ import com.mortals.xhx.module.skin.service.SkinBaseService;
import org.apache.commons.lang3.ArrayUtils;
import com.mortals.framework.util.StringUtils;
import java.io.IOException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.List;
......@@ -77,7 +82,6 @@ public class SkinBaseController extends BaseCRUDJsonBodyMappingController<SkinBa
@Override
protected void doListBefore(SkinBaseEntity query, Map<String, Object> model, Context context) throws AppException {
if (!ObjectUtils.isEmpty(query.getProductCode())) {
ProductEntity productEntity = productService.selectOne(new ProductQuery().productCode(query.getProductCode()));
if (!ObjectUtils.isEmpty(productEntity)) {
......@@ -87,7 +91,7 @@ public class SkinBaseController extends BaseCRUDJsonBodyMappingController<SkinBa
}
String serverName = request.getHeader("server-name");
Integer serverPort = DataUtil.converStr2Int(request.getHeader("server-port"), 0);
// log.info("【应用请求】【请求体】-->serverName{} ,port:{}", serverName, serverPort);
// log.info("【应用请求】【请求体】-->serverName{} ,port:{}", serverName, serverPort);
query.setServerName(serverName);
query.setServerPort(serverPort);
......@@ -96,7 +100,6 @@ public class SkinBaseController extends BaseCRUDJsonBodyMappingController<SkinBa
@Override
protected void init(Map<String, Object> model, Context context) {
this.addDict(model, "imageResolution", paramService.getParamBySecondOrganize("SkinBase", "imageResolution"));
super.init(model, context);
}
......@@ -111,7 +114,7 @@ public class SkinBaseController extends BaseCRUDJsonBodyMappingController<SkinBa
String domainUrl = "";
if (!ObjectUtils.isEmpty(serverName) && Validator.isIpv4(serverName)) {
domainUrl = String.format("http://%s:%d",serverName, serverPort > 0 ? serverPort : 11078);
domainUrl = String.format("http://%s:%d", serverName, serverPort > 0 ? serverPort : 11078);
} else {
boolean isDomain = ReUtil.isMatch("^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})*\\.[a-zA-Z]{2,}$", entity.getServerName());
if (isDomain) {
......@@ -121,7 +124,6 @@ public class SkinBaseController extends BaseCRUDJsonBodyMappingController<SkinBa
}
}
for (SkinFieldEntity field : skinFieldEntities) {
if ("2".equals(field.getFieldType())) {
String fieldUrl = String.format("%s/%s", domainUrl, field.getFieldValue());
......@@ -129,10 +131,45 @@ public class SkinBaseController extends BaseCRUDJsonBodyMappingController<SkinBa
}
}
entity.setSkinFieldList(skinFieldEntities);
return super.viewAfter(id, model, entity, context);
}
/**
* 获取皮肤所有相关资源文件并压缩打包成zip
*/
@PostMapping(value = "skinzip")
public String skinzip(@RequestBody SkinBaseEntity query) {
JSONObject jsonObject = new JSONObject();
try {
Rest<byte[]> rest = this.service.compressSkinZip(query, getContext());
genCode(response, rest.getData());
jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
jsonObject.put(KEY_RESULT_MSG, "压缩文件成功!");
} catch (Exception e) {
log.error("获取异常", e);
jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
jsonObject.put(KEY_RESULT_MSG, super.convertException(e));
}
return jsonObject.toJSONString();
}
/**
* 生成zip文件
*/
private void genCode(HttpServletResponse response, byte[] data) throws IOException {
response.reset();
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-Disposition", "attachment; filename=\"skin.zip\"");
response.addHeader("Content-Length", "" + data.length);
response.setContentType("application/octet-stream; charset=UTF-8");
IOUtils.write(data, response.getOutputStream());
}
}
\ No newline at end of file
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