|
@@ -0,0 +1,133 @@
|
|
|
+package com.ruoyi.file.service;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.ruoyi.file.mapper.FilesMapper;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.DigestUtils;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+
|
|
|
+import javax.servlet.ServletOutputStream;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.io.*;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.List;
|
|
|
+import java.util.UUID;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class FilesServiceImpl extends ServiceImpl<FilesMapper, Files> implements FilesService {
|
|
|
+ @Value("${file.path}")
|
|
|
+ private String filesUploadPath;
|
|
|
+
|
|
|
+ @Value("${file.domain}")
|
|
|
+ private String filesUploadDomain;
|
|
|
+
|
|
|
+ @Value("${file.prefix}")
|
|
|
+ private String filesPrefix;
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String upload(MultipartFile file) {
|
|
|
+
|
|
|
+ String destPath = new File(filesUploadPath).getAbsolutePath();
|
|
|
+
|
|
|
+ String originalFilename = file.getOriginalFilename();
|
|
|
+
|
|
|
+ double size = file.getSize();
|
|
|
+
|
|
|
+ String type = originalFilename.substring(originalFilename.lastIndexOf(".") + 1).toLowerCase();
|
|
|
+
|
|
|
+
|
|
|
+ String uuid = UUID.randomUUID().toString().replaceAll("-", "");
|
|
|
+
|
|
|
+ String fileUuid = uuid + "." + type;
|
|
|
+
|
|
|
+ File uploadFile = new File(destPath + "/" + fileUuid);
|
|
|
+
|
|
|
+
|
|
|
+ File parentFile = uploadFile.getParentFile();
|
|
|
+ if (!parentFile.exists()) {
|
|
|
+ parentFile.mkdirs();
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ String url;
|
|
|
+
|
|
|
+ String md5 = DigestUtils.md5DigestAsHex(file.getInputStream());
|
|
|
+
|
|
|
+ Files dbFiles = this.getFileByMD5(md5);
|
|
|
+ if (dbFiles != null) {
|
|
|
+ url = dbFiles.getUrl();
|
|
|
+ } else {
|
|
|
+ file.transferTo(uploadFile);
|
|
|
+ url = filesUploadDomain + filesPrefix + "/" + fileUuid;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Files saveFile = new Files();
|
|
|
+ saveFile.setFilesName(originalFilename);
|
|
|
+ saveFile.setType(type);
|
|
|
+ saveFile.setSize(size / 1024);
|
|
|
+ saveFile.setUrl(url);
|
|
|
+ saveFile.setMd5(md5);
|
|
|
+ saveFile.setEnable(true);
|
|
|
+ saveFile.setCreateTime(LocalDateTime.now());
|
|
|
+ saveFile.setUpdateTime(null);
|
|
|
+
|
|
|
+ save(saveFile);
|
|
|
+
|
|
|
+
|
|
|
+ return url;
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void download(String filesUUID, HttpServletResponse response) {
|
|
|
+ try {
|
|
|
+
|
|
|
+ File uploadFile = new File(filesUploadPath + filesUUID);
|
|
|
+
|
|
|
+
|
|
|
+ FileInputStream fileInputStream = new FileInputStream(uploadFile);
|
|
|
+
|
|
|
+ InputStream inputStream = new BufferedInputStream(fileInputStream);
|
|
|
+
|
|
|
+ byte[] buffer = new byte[inputStream.available()];
|
|
|
+ inputStream.read(buffer);
|
|
|
+ inputStream.close();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filesUUID, "UTF-8"));
|
|
|
+ response.setContentType("application/octet-stream");
|
|
|
+
|
|
|
+
|
|
|
+ ServletOutputStream os = response.getOutputStream();
|
|
|
+ os.write(buffer);
|
|
|
+
|
|
|
+
|
|
|
+ fileInputStream.close();
|
|
|
+ os.flush();
|
|
|
+ os.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private Files getFileByMD5(String md5) {
|
|
|
+
|
|
|
+ QueryWrapper<Files> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("md5", md5);
|
|
|
+ List<Files> filesList = list(queryWrapper);
|
|
|
+ return filesList.size() == 0 ? null : filesList.get(0);
|
|
|
+ }
|
|
|
+}
|