diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/data/mapper/xml/PayFileDownloadRecordMapper.xml b/jero-boot-incoming-payment/src/main/java/com/jero/data/mapper/xml/PayFileDownloadRecordMapper.xml
index cdc2f0d7..a97a1be6 100644
--- a/jero-boot-incoming-payment/src/main/java/com/jero/data/mapper/xml/PayFileDownloadRecordMapper.xml
+++ b/jero-boot-incoming-payment/src/main/java/com/jero/data/mapper/xml/PayFileDownloadRecordMapper.xml
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/oss/entity/FileDownloadRecord.java b/jero-boot-module-system/src/main/java/com/jero/modules/oss/entity/FileDownloadRecord.java
new file mode 100644
index 00000000..89070446
--- /dev/null
+++ b/jero-boot-module-system/src/main/java/com/jero/modules/oss/entity/FileDownloadRecord.java
@@ -0,0 +1,59 @@
+package com.jero.modules.oss.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+
+/**
+ * @Description: pay_file_download_record
+ * @Author: jeecg-boot
+ * @Date: 2021-08-30
+ * @Version: V1.0
+ */
+@Data
+@TableName("pay_file_download_record")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="pay_file_download_record对象", description="pay_file_download_record")
+public class FileDownloadRecord implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**主键*/
+ @TableId(type = IdType.ASSIGN_ID)
+ @ApiModelProperty(value = "主键")
+ private String id;
+
+ @ApiModelProperty(value = "文件id")
+ private String fileId;
+ /**用户id*/
+ @Excel(name = "用户id", width = 15)
+ @ApiModelProperty(value = "用户id")
+ private String userId;
+ /**创建人*/
+ @ApiModelProperty(value = "创建人")
+ private String createBy;
+ /**创建时间*/
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern="yyyy-MM-dd")
+ @Excel(name = "下载时间", width = 15,exportFormat = "yyyy-MM-dd")
+ @ApiModelProperty(value = "创建时间")
+ private java.util.Date createTime;
+ /**更新人*/
+ @ApiModelProperty(value = "更新人")
+ private String updateBy;
+ /**更新时间*/
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern="yyyy-MM-dd")
+ @ApiModelProperty(value = "更新时间")
+ private java.util.Date updateTime;
+}
diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/FileDownloadRecordMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/FileDownloadRecordMapper.java
new file mode 100644
index 00000000..7ccd850e
--- /dev/null
+++ b/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/FileDownloadRecordMapper.java
@@ -0,0 +1,16 @@
+package com.jero.modules.oss.mapper;
+
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jero.modules.oss.entity.FileDownloadRecord;
+
+/**
+ * @Description: pay_file_download_record
+ * @Author: jeecg-boot
+ * @Date: 2021-08-30
+ * @Version: V1.0
+ */
+public interface FileDownloadRecordMapper extends BaseMapper {
+
+}
diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/OSSFileMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/OSSFileMapper.java
index c4f84697..c7ec86a4 100644
--- a/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/OSSFileMapper.java
+++ b/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/OSSFileMapper.java
@@ -4,9 +4,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.oss.entity.OSSFile;
import org.apache.ibatis.annotations.Param;
+import java.util.Date;
+
public interface OSSFileMapper extends BaseMapper {
/**
* 根据文件id获取文件名称
*/
- String findFileNameByFileId(@Param("fileId")String fileId);
+ String findFileNameByFileId(@Param("fileId") String fileId);
+
+ void saveDownloadTimes(@Param("userId") String userId, @Param("fileId") String fileId, @Param("date") Date date);
}
diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/xml/FileDownloadRecordMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/xml/FileDownloadRecordMapper.xml
new file mode 100644
index 00000000..b5dc6534
--- /dev/null
+++ b/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/xml/FileDownloadRecordMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/xml/OSSFileMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/xml/OSSFileMapper.xml
index c2663f90..7ee2a132 100644
--- a/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/xml/OSSFileMapper.xml
+++ b/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/xml/OSSFileMapper.xml
@@ -12,4 +12,7 @@
a.id = #{fileId}
+
+ insert into pay_file_download_record(id, file_id, file_name, file_path, company_name, download_name, meeting_name, create_by, create_time, update_by, update_time)
+
diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/IOSSFileService.java b/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/IOSSFileService.java
index cadfb73d..4ba97bb5 100644
--- a/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/IOSSFileService.java
+++ b/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/IOSSFileService.java
@@ -17,4 +17,8 @@ public interface IOSSFileService extends IService {
* @param ossFile
*/
void updateAndPush(OSSFile ossFile);
+
+ void saveDownloadTimes(String fileId,String userId);
+
+ Integer searchDownloadTimes(String fileId, String userId);
}
diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java
index 63e6d3f5..0f4f1bb5 100644
--- a/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java
+++ b/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java
@@ -1,20 +1,25 @@
package com.jero.modules.oss.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.util.AuthenticationUtils;
import com.jero.common.util.CommonUtils;
import com.jero.common.util.oss.OssBootUtil;
+import com.jero.modules.oss.entity.FileDownloadRecord;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.mapper.OSSFileMapper;
+import com.jero.modules.oss.mapper.FileDownloadRecordMapper;
import com.jero.modules.oss.service.IOSSFileService;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
+import javax.annotation.Resource;
import java.io.IOException;
@Service("ossFileService")
public class OSSFileServiceImpl extends ServiceImpl implements IOSSFileService {
-
+ @Resource
+ private FileDownloadRecordMapper fileDownloadRecordMapper;
@Override
public void upload(MultipartFile multipartFile) throws IOException {
String fileName = multipartFile.getOriginalFilename();
@@ -47,4 +52,20 @@ public class OSSFileServiceImpl extends ServiceImpl impl
AuthenticationUtils.post("/oss/file/updateAndPush",null,ossFile);
}
+ @Override
+ public void saveDownloadTimes(String fileId,String userId) {
+ FileDownloadRecord fileDownloadRecord = new FileDownloadRecord();
+ fileDownloadRecord.setFileId(fileId);
+ fileDownloadRecord.setUserId(userId);
+ fileDownloadRecordMapper.insert(fileDownloadRecord);
+ }
+
+ @Override
+ public Integer searchDownloadTimes(String fileId, String userId) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("user_id",userId);
+ wrapper.eq("file_id",fileId);
+ return fileDownloadRecordMapper.selectCount(wrapper);
+ }
+
}
diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java
index 68e41505..d7ad456a 100644
--- a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java
+++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java
@@ -169,6 +169,11 @@ public class CommonController {
}
response.addHeader("Content-Disposition", "attachment;fileName=" + new String(fileName.getBytes("UTF-8"),"iso-8859-1"));
response.setContentType("application/force-download");// 设置强制下载不打开
+ if (type == null) {
+ if (fileName.contains(".jpg") || fileName.contains(".png") || fileName.contains(".gif") || fileName.contains(".jpeg")) {
+ response.setContentType("image/png;image/jpg;image/gif;image/jpeg");
+ }
+ }
outputStream = response.getOutputStream();
byte[] buf = new byte[1024];
int len;
@@ -217,6 +222,115 @@ public class CommonController {
}
+ /**
+ * 预览图片&下载文件
+ *
+ * @param id 传入文件id
+ * @param request
+ * @param response
+ */
+ @GetMapping(value = "/userDownload/{id}")
+ public void download(@PathVariable String id,HttpServletRequest request, HttpServletResponse response,String type) {
+ // 查询数据表数据是否存在
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(OSSFile::getId,id);
+ OSSFile ossFile = ossFileService.getOne(queryWrapper);
+ if( null == ossFile){
+ throw new JeroBootException("文件不存在..");
+ }
+ String fileUrl = ossFile.getUrl();
+ InputStream inputStream = null;
+ OutputStream outputStream = null;
+ try {
+ String fileName = "";
+ if(CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)){
+ //本地下载
+ String filePath = uploadpath + File.separator + fileUrl;
+ File file = new File(filePath);
+ if(!file.exists()){
+ response.setStatus(404);
+ throw new RuntimeException("文件不存在..");
+ }
+ // 文件名称
+ fileName = file.getName();
+ inputStream = new BufferedInputStream(new FileInputStream(filePath));
+ }else if(CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)){
+ // minio 下载
+ // 通过MinioUtil查询时 只需要桶后面的路径
+ String minioUrl = MinioUtil.getMinioUrl();
+ // Linux/unix 系统下文件路径分隔符为"/" 获取minio与存储桶的路径
+ minioUrl = minioUrl + MinioUtil.getBucketName() + "/";
+ String url = fileUrl.replace(minioUrl, "");
+ // 文件名称
+ fileName = ossFile.getFileName();
+ inputStream = MinioUtil.getMinioFile(MinioUtil.getBucketName(), url);
+ }
+
+ ossFileService.updateById(ossFile);
+ LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+ if (loginUser.getIsCompanyUser()) {
+ Integer integer = ossFileService.searchDownloadTimes(ossFile.getId(), loginUser.getId());
+ if (integer >= 5) {
+ throw new JeroBootException("超出下载次数限制");
+ }
+ }
+ ossFileService.saveDownloadTimes(ossFile.getId(), loginUser.getId());
+
+ response.addHeader("Content-Disposition", "attachment;fileName=" + new String(fileName.getBytes("UTF-8"),"iso-8859-1"));
+ response.setContentType("application/force-download");// 设置强制下载不打开
+ if (type == null) {
+ if (fileName.contains(".jpg") || fileName.contains(".png") || fileName.contains(".gif") || fileName.contains(".jpeg")) {
+ response.setContentType("image/png;image/jpg;image/gif;image/jpeg");
+ }
+ }
+ outputStream = response.getOutputStream();
+ byte[] buf = new byte[1024];
+ int len;
+ while ((len = inputStream.read(buf)) > 0) {
+ outputStream.write(buf, 0, len);
+ }
+ response.flushBuffer();
+ //统计下载和上传次数
+ //if ("download".equals(type)) {
+ Integer downloadNumber = ossFile.getDownloadNumber();
+ if (downloadNumber == null) {
+ ossFile.setDownloadNumber(0);
+ } else {
+ ossFile.setDownloadNumber(downloadNumber + 1);
+ }
+
+ //} else if ("view".equals(type)) {
+ // Integer viewNumber = ossFile.getViewNumber();
+ // if (viewNumber == null) {
+ // ossFile.setViewNumber(0);
+ // } else {
+ // ossFile.setViewNumber(viewNumber + 1);
+ // }
+ // ossFileService.updateAndPush(ossFile);
+ //}
+ } catch (IOException e) {
+ log.error("预览文件失败" + e.getMessage());
+ response.setStatus(404);
+ e.printStackTrace();
+ } finally {
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (IOException e) {
+ log.error(e.getMessage(), e);
+ }
+ }
+ if (outputStream != null) {
+ try {
+ outputStream.close();
+ } catch (IOException e) {
+ log.error(e.getMessage(), e);
+ }
+ }
+ }
+
+ }
+
/**
* @功能:pdf预览Iframe
* @param modelAndView