|
@@ -3,13 +3,21 @@ package com.diagbot.service.impl;
|
|
import com.diagbot.client.fastdfs.FastDFSClient;
|
|
import com.diagbot.client.fastdfs.FastDFSClient;
|
|
import com.diagbot.client.fastdfs.FastDFSFile;
|
|
import com.diagbot.client.fastdfs.FastDFSFile;
|
|
import com.diagbot.dto.FileDTO;
|
|
import com.diagbot.dto.FileDTO;
|
|
|
|
+import com.diagbot.dto.FileThumDTO;
|
|
|
|
+import com.diagbot.exception.CommonErrorCode;
|
|
|
|
+import com.diagbot.exception.CommonException;
|
|
import com.diagbot.service.UploadService;
|
|
import com.diagbot.service.UploadService;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import net.coobird.thumbnailator.Thumbnails;
|
|
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.ByteArrayInputStream;
|
|
|
|
+import java.io.ByteArrayOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.InputStream;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.List;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @Description: 文件上传服务接口实现
|
|
* @Description: 文件上传服务接口实现
|
|
@@ -24,9 +32,9 @@ public class UploadServiceImpl implements UploadService {
|
|
if (file.isEmpty()) {
|
|
if (file.isEmpty()) {
|
|
return new FileDTO("FAILURE", "文件不能为空");
|
|
return new FileDTO("FAILURE", "文件不能为空");
|
|
}
|
|
}
|
|
- //文件大小上限1M
|
|
|
|
- if (file.getSize() > 1024 * 1024) {
|
|
|
|
- return new FileDTO("FAILURE", "文件上传失败,超出大小限制1MB");
|
|
|
|
|
|
+ //文件大小上限4M
|
|
|
|
+ if (file.getSize() > 4 * 1024 * 1024) {
|
|
|
|
+ return new FileDTO("FAILURE", "文件上传失败,超出大小限制4MB");
|
|
}
|
|
}
|
|
try {
|
|
try {
|
|
FileDTO fileDTO = saveFile(file);
|
|
FileDTO fileDTO = saveFile(file);
|
|
@@ -37,6 +45,89 @@ public class UploadServiceImpl implements UploadService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public List<FileDTO> multiFileUpload(MultipartFile[] mpfs) {
|
|
|
|
+ // 上传文件返回的路径集合
|
|
|
|
+ List<FileDTO> fileDTOS = new ArrayList<>();
|
|
|
|
+ if (null == mpfs) {
|
|
|
|
+ throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "文件不能为空");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (MultipartFile file : mpfs) {
|
|
|
|
+ if (file.isEmpty()) {
|
|
|
|
+ fileDTOS.add(new FileDTO("FAILURE", "文件不能为空"));
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ //文件大小上限4M
|
|
|
|
+ if (file.getSize() > 4 * 1024 * 1024) {
|
|
|
|
+ fileDTOS.add(new FileDTO("FAILURE", "文件上传失败,超出大小限制4MB"));
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ FileDTO fileDTO = saveFile(file);
|
|
|
|
+ fileDTOS.add(fileDTO);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("文件上传失败", e);
|
|
|
|
+ fileDTOS.add(new FileDTO("FAILURE", "文件上传失败,请重新上传"));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return fileDTOS;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<FileThumDTO> multiFileThumUpload(MultipartFile[] mpfs) {
|
|
|
|
+ // 上传文件返回的路径集合
|
|
|
|
+ List<FileThumDTO> fileDTOS = new ArrayList<>();
|
|
|
|
+ if (null == mpfs) {
|
|
|
|
+ throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "文件不能为空");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ FileThumDTO fileThumDTO = null;
|
|
|
|
+ for (MultipartFile file : mpfs) {
|
|
|
|
+ if (file.isEmpty()) {
|
|
|
|
+ fileThumDTO = new FileThumDTO();
|
|
|
|
+ fileThumDTO.setSource(new FileDTO("FAILURE", "文件不能为空"));
|
|
|
|
+ fileDTOS.add(fileThumDTO);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ //文件大小上限4M
|
|
|
|
+ if (file.getSize() > 4 * 1024 * 1024) {
|
|
|
|
+ fileThumDTO = new FileThumDTO();
|
|
|
|
+ fileThumDTO.setSource(new FileDTO("FAILURE", "文件上传失败,超出大小限制4MB"));
|
|
|
|
+ fileDTOS.add(fileThumDTO);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ fileThumDTO = saveFileWithThum(file);
|
|
|
|
+ fileDTOS.add(fileThumDTO);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("文件上传失败", e);
|
|
|
|
+ fileThumDTO = new FileThumDTO();
|
|
|
|
+ fileThumDTO.setSource(new FileDTO("FAILURE", "文件上传失败,请重新上传"));
|
|
|
|
+ fileDTOS.add(fileThumDTO);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return fileDTOS;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @param multipartFile
|
|
|
|
+ * @return
|
|
|
|
+ * @throws IOException
|
|
|
|
+ */
|
|
|
|
+ public FileThumDTO saveFileWithThum(MultipartFile multipartFile) throws IOException {
|
|
|
|
+ FileThumDTO fileThumDTO = new FileThumDTO();
|
|
|
|
+ //原图上传到服务器
|
|
|
|
+ FileDTO source = saveFile(multipartFile);
|
|
|
|
+ fileThumDTO.setSource(source);
|
|
|
|
+ //压缩图片
|
|
|
|
+ FileDTO thumbnail = saveFile(multipartFile, true);
|
|
|
|
+ fileThumDTO.setThumbnail(thumbnail);
|
|
|
|
+ return fileThumDTO;
|
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
/**
|
|
* @param multipartFile
|
|
* @param multipartFile
|
|
@@ -44,12 +135,29 @@ public class UploadServiceImpl implements UploadService {
|
|
* @throws IOException
|
|
* @throws IOException
|
|
*/
|
|
*/
|
|
public FileDTO saveFile(MultipartFile multipartFile) throws IOException {
|
|
public FileDTO saveFile(MultipartFile multipartFile) throws IOException {
|
|
|
|
+ return saveFile(multipartFile, false);
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * @param multipartFile
|
|
|
|
+ * @return
|
|
|
|
+ * @throws IOException
|
|
|
|
+ */
|
|
|
|
+ public FileDTO saveFile(MultipartFile multipartFile, Boolean isThum) throws IOException {
|
|
String[] fileAbsolutePath = {};
|
|
String[] fileAbsolutePath = {};
|
|
String fileName = multipartFile.getOriginalFilename();
|
|
String fileName = multipartFile.getOriginalFilename();
|
|
String ext = fileName.substring(fileName.lastIndexOf(".") + 1);
|
|
String ext = fileName.substring(fileName.lastIndexOf(".") + 1);
|
|
byte[] file_buff = null;
|
|
byte[] file_buff = null;
|
|
InputStream inputStream = multipartFile.getInputStream();
|
|
InputStream inputStream = multipartFile.getInputStream();
|
|
|
|
+ //压缩图片
|
|
|
|
+ if (isThum) {
|
|
|
|
+ Integer width = 280;
|
|
|
|
+ Integer hight = 430;
|
|
|
|
+ //文件名重新命名
|
|
|
|
+ fileName = width + "_" + hight + "_" + fileName;
|
|
|
|
+ inputStream = compress(inputStream, width, hight);
|
|
|
|
+ }
|
|
|
|
+
|
|
if (inputStream != null) {
|
|
if (inputStream != null) {
|
|
int len1 = inputStream.available();
|
|
int len1 = inputStream.available();
|
|
file_buff = new byte[len1];
|
|
file_buff = new byte[len1];
|
|
@@ -70,9 +178,19 @@ public class UploadServiceImpl implements UploadService {
|
|
String path = "/" + fileAbsolutePath[0] + "/" + fileAbsolutePath[1];
|
|
String path = "/" + fileAbsolutePath[0] + "/" + fileAbsolutePath[1];
|
|
FileDTO fileDTO = new FileDTO("SUCCESS", "文件上传成功");
|
|
FileDTO fileDTO = new FileDTO("SUCCESS", "文件上传成功");
|
|
fileDTO.setUrl(path);
|
|
fileDTO.setUrl(path);
|
|
- fileDTO.setOriginal(multipartFile.getOriginalFilename());
|
|
|
|
- fileDTO.setTitle(multipartFile.getOriginalFilename());
|
|
|
|
|
|
+ fileDTO.setOriginal(fileName);
|
|
|
|
+ fileDTO.setTitle(fileName);
|
|
return fileDTO;
|
|
return fileDTO;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public ByteArrayInputStream compress(InputStream inputStream, Integer width, Integer hight) throws IOException {
|
|
|
|
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
|
|
+ Thumbnails.of(inputStream)
|
|
|
|
+ .size(width, hight)
|
|
|
|
+ .toOutputStream(baos);
|
|
|
|
+ final ByteArrayInputStream swapStream = new ByteArrayInputStream(baos.toByteArray());
|
|
|
|
+ return swapStream;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|