|
|
|
@ -10,17 +10,21 @@ import com.spring.modules.oss.service.SysOssService; |
|
|
|
import com.spring.modules.oss.vo.OssVo; |
|
|
|
import com.spring.modules.oss.vo.SysOssEntityData; |
|
|
|
import org.apache.commons.lang.StringUtils; |
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.util.Assert; |
|
|
|
import org.springframework.util.FileCopyUtils; |
|
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
|
|
|
|
|
import javax.servlet.ServletOutputStream; |
|
|
|
import javax.servlet.http.HttpServletResponse; |
|
|
|
import java.io.*; |
|
|
|
import java.net.URLEncoder; |
|
|
|
import java.nio.file.Files; |
|
|
|
import java.nio.file.Path; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Date; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
import java.util.*; |
|
|
|
import java.util.zip.ZipEntry; |
|
|
|
import java.util.zip.ZipOutputStream; |
|
|
|
|
|
|
|
@ -30,14 +34,14 @@ public class SysOssServiceImpl extends ServiceImpl<SysOssDao, SysOssEntity> impl |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageUtils queryPage(Map<String, Object> params) { |
|
|
|
String fileName = (String)params.get("fileName"); |
|
|
|
String fileType = (String)params.get("fileType"); |
|
|
|
String orderRef1 = (String)params.get("orderRef1"); |
|
|
|
String orderRef2 = (String)params.get("orderRef2"); |
|
|
|
String orderRef3 = (String)params.get("orderRef3"); |
|
|
|
String fileName = (String) params.get("fileName"); |
|
|
|
String fileType = (String) params.get("fileType"); |
|
|
|
String orderRef1 = (String) params.get("orderRef1"); |
|
|
|
String orderRef2 = (String) params.get("orderRef2"); |
|
|
|
String orderRef3 = (String) params.get("orderRef3"); |
|
|
|
long page = Long.valueOf(params.get("page").toString()); |
|
|
|
long limit = Long.valueOf(params.get("limit").toString()); |
|
|
|
IPage<OssVo> pageData = this.baseMapper.queryPage( new Page<OssVo>(page, limit),params); |
|
|
|
IPage<OssVo> pageData = this.baseMapper.queryPage(new Page<OssVo>(page, limit), params); |
|
|
|
return new PageUtils(pageData); |
|
|
|
} |
|
|
|
|
|
|
|
@ -50,13 +54,128 @@ public class SysOssServiceImpl extends ServiceImpl<SysOssDao, SysOssEntity> impl |
|
|
|
@Override |
|
|
|
public void updateOssRef(SysOssEntity sysOssEntity) { |
|
|
|
lambdaUpdate() |
|
|
|
.set(StringUtils.isNotEmpty(sysOssEntity.getFileType()),SysOssEntity::getFileType,sysOssEntity.getFileType()) |
|
|
|
.set(StringUtils.isNotEmpty(sysOssEntity.getOrderRef1()),SysOssEntity::getOrderRef1,sysOssEntity.getOrderRef1()) |
|
|
|
.set(StringUtils.isNotEmpty(sysOssEntity.getOrderRef2()),SysOssEntity::getOrderRef2,sysOssEntity.getOrderRef2()) |
|
|
|
.set(StringUtils.isNotEmpty(sysOssEntity.getOrderRef3()),SysOssEntity::getOrderRef3,sysOssEntity.getOrderRef3()) |
|
|
|
.set(StringUtils.isNotEmpty(sysOssEntity.getFileSuffix()),SysOssEntity::getFileSuffix,sysOssEntity.getFileSuffix()) |
|
|
|
.set(sysOssEntity.getFileTypeCode()!=null,SysOssEntity::getFileTypeCode,sysOssEntity.getFileTypeCode()) |
|
|
|
.eq(SysOssEntity::getId,sysOssEntity.getId()) |
|
|
|
.set(StringUtils.isNotEmpty(sysOssEntity.getFileType()), SysOssEntity::getFileType, sysOssEntity.getFileType()) |
|
|
|
.set(StringUtils.isNotEmpty(sysOssEntity.getOrderRef1()), SysOssEntity::getOrderRef1, sysOssEntity.getOrderRef1()) |
|
|
|
.set(StringUtils.isNotEmpty(sysOssEntity.getOrderRef2()), SysOssEntity::getOrderRef2, sysOssEntity.getOrderRef2()) |
|
|
|
.set(StringUtils.isNotEmpty(sysOssEntity.getOrderRef3()), SysOssEntity::getOrderRef3, sysOssEntity.getOrderRef3()) |
|
|
|
.set(StringUtils.isNotEmpty(sysOssEntity.getFileSuffix()), SysOssEntity::getFileSuffix, sysOssEntity.getFileSuffix()) |
|
|
|
.set(sysOssEntity.getFileTypeCode() != null, SysOssEntity::getFileTypeCode, sysOssEntity.getFileTypeCode()) |
|
|
|
.eq(SysOssEntity::getId, sysOssEntity.getId()) |
|
|
|
.update(); |
|
|
|
} |
|
|
|
|
|
|
|
@Value("${sys-file.file-path}") |
|
|
|
private String filePath; |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public void upload(List<MultipartFile> files, SysOssEntity oss) { |
|
|
|
// 上传文件 |
|
|
|
Date date = new Date(); |
|
|
|
for (MultipartFile file : files) { |
|
|
|
String fileName = file.getOriginalFilename(); |
|
|
|
if (StringUtils.isEmpty(fileName)) { |
|
|
|
throw new IllegalArgumentException("文件名不能为空"); |
|
|
|
} |
|
|
|
String[] strings = fileName.split("\\."); |
|
|
|
String suffix = strings[strings.length - 1]; |
|
|
|
// UUID生成文件名 |
|
|
|
String uuid = java.util.UUID.randomUUID().toString().replaceAll("-", ""); |
|
|
|
String newFileName = uuid +"."+ suffix; |
|
|
|
// 根目录 D:\plm-file 加 当前年月日 |
|
|
|
String rootPath = filePath; |
|
|
|
String yearMonth = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); |
|
|
|
String path = rootPath + "\\" + yearMonth; |
|
|
|
File fileDir = new File(path); |
|
|
|
if (!fileDir.exists()) { |
|
|
|
fileDir.mkdirs(); |
|
|
|
} |
|
|
|
// 保存文件 |
|
|
|
File targetFile = new File(path, newFileName); |
|
|
|
try { |
|
|
|
file.transferTo(targetFile); |
|
|
|
} catch (IOException e) { |
|
|
|
throw new RuntimeException("上传文件失败"); |
|
|
|
} |
|
|
|
// 保存文件信息 |
|
|
|
oss.setFileName(fileName); |
|
|
|
oss.setUrl(path + "\\" + newFileName); |
|
|
|
oss.setNewFileName(newFileName); |
|
|
|
oss.setCreateDate(date); |
|
|
|
oss.setFileType(suffix); |
|
|
|
this.save(oss); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public void removeOssFile(List<Integer> ids) { |
|
|
|
List<SysOssEntity> list = lambdaQuery().in(SysOssEntity::getId, ids).list(); |
|
|
|
for (SysOssEntity entity : list) { |
|
|
|
File file = new File(entity.getUrl()); |
|
|
|
if (file.exists()) { |
|
|
|
file.delete(); |
|
|
|
} |
|
|
|
} |
|
|
|
removeByIds(ids); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<SysOssEntity> queryOssFile(SysOssEntity oss) { |
|
|
|
if (Objects.isNull(oss.getOrderRef1()) && Objects.isNull(oss.getOrderRef2()) && Objects.isNull(oss.getOrderRef3())) { |
|
|
|
return new ArrayList<>(); |
|
|
|
} |
|
|
|
return lambdaQuery() |
|
|
|
.eq(SysOssEntity::getOrderRef1, oss.getOrderRef1()) |
|
|
|
.eq(SysOssEntity::getOrderRef2, oss.getOrderRef2()) |
|
|
|
.eq(StringUtils.isNotEmpty(oss.getOrderRef3()), SysOssEntity::getOrderRef3, oss.getOrderRef3()) |
|
|
|
.list(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void previewOssFileById(Integer id, HttpServletResponse response) { |
|
|
|
SysOssEntity oss = this.getById(id); |
|
|
|
if (Objects.isNull(oss)) { |
|
|
|
throw new IllegalArgumentException("文件不存在"); |
|
|
|
} |
|
|
|
|
|
|
|
// 创建文件对象 |
|
|
|
File file = new File(oss.getUrl()); |
|
|
|
if (!file.exists()) { |
|
|
|
throw new IllegalArgumentException("文件不存在"); |
|
|
|
} |
|
|
|
|
|
|
|
String encodedFileName; |
|
|
|
try { |
|
|
|
encodedFileName = URLEncoder.encode(oss.getFileName(), "UTF-8"); |
|
|
|
} catch (UnsupportedEncodingException e) { |
|
|
|
throw new RuntimeException("文件名编码失败", e); |
|
|
|
} |
|
|
|
|
|
|
|
// 设置响应头 |
|
|
|
if ("txt".equals(oss.getFileSuffix())){ |
|
|
|
response.setContentType("text/plain;charset=utf-8"); |
|
|
|
}else { |
|
|
|
response.setContentType("application/octet-stream;charset=utf-8"); |
|
|
|
} |
|
|
|
response.setHeader("Content-Disposition", "attachment; filename=" + encodedFileName); |
|
|
|
|
|
|
|
try (FileInputStream fis = new FileInputStream(file); |
|
|
|
BufferedInputStream bis = new BufferedInputStream(fis); |
|
|
|
ServletOutputStream os = response.getOutputStream()) { |
|
|
|
|
|
|
|
byte[] buffer = new byte[1024]; |
|
|
|
int bytesRead; |
|
|
|
|
|
|
|
// 循环读取文件内容并写入到响应流中 |
|
|
|
while ((bytesRead = bis.read(buffer)) != -1) { |
|
|
|
os.write(buffer, 0, bytesRead); |
|
|
|
} |
|
|
|
|
|
|
|
} catch (IOException e) { |
|
|
|
throw new RuntimeException("文件下载失败", e); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |