提交 9f873c36 authored 作者: zhangshuang's avatar zhangshuang

文件信息保存数据库与swagger

上级 17f1079c
...@@ -33,5 +33,22 @@ ...@@ -33,5 +33,22 @@
<artifactId>fastjson</artifactId> <artifactId>fastjson</artifactId>
<version>1.2.46</version> <version>1.2.46</version>
</dependency> </dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>
\ No newline at end of file
...@@ -28,8 +28,7 @@ public class FileDownLoadController { ...@@ -28,8 +28,7 @@ public class FileDownLoadController {
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "fileName",value = "文件名称",paramType = "query",example = "1.zip",required = true), @ApiImplicitParam(name = "fileName",value = "文件名称",paramType = "query",example = "1.zip",required = true),
@ApiImplicitParam(name = "response",value = "响应对象",paramType = "query",required = true), @ApiImplicitParam(name = "response",value = "响应对象",paramType = "query",required = true),
@ApiImplicitParam(name = "request",value = "请求对象",paramType = "query",required = true), @ApiImplicitParam(name = "request",value = "请求对象",paramType = "query",required = true)
}) })
public void fileDownLoad(@PathVariable("fileName") String fileName, HttpServletResponse response, HttpServletRequest request){ public void fileDownLoad(@PathVariable("fileName") String fileName, HttpServletResponse response, HttpServletRequest request){
fileDownLoadService.fileDownLoad(fileName,response,request); fileDownLoadService.fileDownLoad(fileName,response,request);
......
package com.zjty.efs.ftp.controller;
import com.zjty.efs.ftp.base.response.ServerResponse;
import com.zjty.efs.ftp.service.FileSaveService;
import com.zjty.efs.misc.config.AutoDocument;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@AutoDocument
@RestController
@RequestMapping("/file")
@Api(tags = "文件存储",description = "对存储在数据库中文件信息的操作")
public class FileSaveController {
@Autowired
private FileSaveService fileSaveService;
@GetMapping("/findById")
@ApiOperation(value = "文件查询",notes = "通过文件id查询文件信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "idList",value = "文件id集合",paramType = "query",example = "[1,2]",required = true)
})
public ServerResponse findById(@RequestBody List<Integer> idList){
return fileSaveService.getFiles(idList);
}
}
...@@ -32,10 +32,10 @@ public class FileUploadController { ...@@ -32,10 +32,10 @@ public class FileUploadController {
return fileUploadService.fileUpload(httpServletRequest); return fileUploadService.fileUpload(httpServletRequest);
} }
/** /* *//**
* @author zs * @author zs
* 检查文件存在与否 * 检查文件存在与否
*/ *//*
@PostMapping("/checkFile") @PostMapping("/checkFile")
@ResponseBody @ResponseBody
@ApiOperation(value = "文件检查",notes = "检查文件存在与否") @ApiOperation(value = "文件检查",notes = "检查文件存在与否")
...@@ -44,7 +44,7 @@ public class FileUploadController { ...@@ -44,7 +44,7 @@ public class FileUploadController {
}) })
public ServerResponse checkFile(@RequestParam(value = "md5File") String md5File) { public ServerResponse checkFile(@RequestParam(value = "md5File") String md5File) {
return fileUploadService.checkFile(md5File); return fileUploadService.checkFile(md5File);
} }*/
/** /**
* @author zs * @author zs
...@@ -53,8 +53,7 @@ public class FileUploadController { ...@@ -53,8 +53,7 @@ public class FileUploadController {
@PostMapping("/checkChunk") @PostMapping("/checkChunk")
@ApiOperation(value = "分片检查",notes = "检查分片存不存在") @ApiOperation(value = "分片检查",notes = "检查分片存不存在")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "md5File",value = "md5生成的文件名称",paramType = "query",required = true), @ApiImplicitParam(name = "checkChunkRequests",value = "检查分片集合存不存在",paramType = "query",required = true)
@ApiImplicitParam(name = "chunk",value = "分片名称",paramType = "query",required = true)
}) })
public ServerResponse checkChunk(@RequestBody List<CheckChunkRequest> checkChunkRequests) { public ServerResponse checkChunk(@RequestBody List<CheckChunkRequest> checkChunkRequests) {
return fileUploadService.checkChunk(checkChunkRequests); return fileUploadService.checkChunk(checkChunkRequests);
......
package com.zjty.efs.ftp.dao;
import com.zjty.efs.ftp.entity.FileSave;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
public interface FileSaveDao extends JpaRepository<FileSave,Integer>, JpaSpecificationExecutor {
List<FileSave> findByIdIn(List<Integer> idList);
}
package com.zjty.efs.ftp.entity; package com.zjty.efs.ftp.entity;
import com.zjty.efs.misc.config.AutoDocument; import com.zjty.efs.misc.config.AutoDocument;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
...@@ -9,6 +11,7 @@ import lombok.NoArgsConstructor; ...@@ -9,6 +11,7 @@ import lombok.NoArgsConstructor;
@AutoDocument @AutoDocument
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@ApiModel(value = "分片检查",description = "分片检查请求体")
@Data @Data
public class CheckChunkRequest { public class CheckChunkRequest {
@ApiModelProperty(value = "md5File",notes = "md5生成的文件夹名称") @ApiModelProperty(value = "md5File",notes = "md5生成的文件夹名称")
......
package com.zjty.efs.ftp.entity; package com.zjty.efs.ftp.entity;
import com.zjty.efs.misc.config.AutoDocument; import com.zjty.efs.misc.config.AutoDocument;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
...@@ -10,6 +12,7 @@ import lombok.NoArgsConstructor; ...@@ -10,6 +12,7 @@ import lombok.NoArgsConstructor;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@ApiModel(value = "分片检查",description = "分片检查响应体")
public class CheckChunkResponse { public class CheckChunkResponse {
@ApiModelProperty(value = "md5File",notes = "md5生成的文件夹名称") @ApiModelProperty(value = "md5File",notes = "md5生成的文件夹名称")
private String md5File; private String md5File;
......
package com.zjty.efs.ftp.entity;
import com.zjty.efs.misc.config.AutoDocument;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@AutoDocument
@AllArgsConstructor
@NoArgsConstructor
@Data
@Entity
@ApiModel(value = "文件存储",description = "将文件信息存储在数据库中")
public class FileSave {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@ApiModelProperty(value = "id",notes = "文件id",example = "1")
private Integer id;//文件id
@ApiModelProperty(value = "realName",notes = "文件真正存储名称",example = "1(1).zip")
private String realName;//真实名称
@ApiModelProperty(value = "fileName",notes = "文件传入名称",example = "1.zip")
private String fileName;//传入名称
@ApiModelProperty(value = "path",notes = "文件真正存储路径",example = "/file/uploads/1(1).zip")
private String path;//文件存储路径
}
package com.zjty.efs.ftp.entity; package com.zjty.efs.ftp.entity;
import com.zjty.efs.misc.config.AutoDocument; import com.zjty.efs.misc.config.AutoDocument;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
...@@ -10,6 +12,7 @@ import lombok.NoArgsConstructor; ...@@ -10,6 +12,7 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Data @Data
@ApiModel(value = "合并",description = "合并请求体")
public class MergeRequest { public class MergeRequest {
@ApiModelProperty(value = "name",notes = "合成后的文件名称") @ApiModelProperty(value = "name",notes = "合成后的文件名称")
private String name;//文件 private String name;//文件
......
package com.zjty.efs.ftp.entity; package com.zjty.efs.ftp.entity;
import com.zjty.efs.misc.config.AutoDocument; import com.zjty.efs.misc.config.AutoDocument;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
...@@ -10,6 +12,7 @@ import lombok.NoArgsConstructor; ...@@ -10,6 +12,7 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Data @Data
@ApiModel(value = "合并",description = "合并响应体")
public class MergeResponse { public class MergeResponse {
@ApiModelProperty(value = "name",notes = "上传文件名称",example = "1.zip") @ApiModelProperty(value = "name",notes = "上传文件名称",example = "1.zip")
private String name;//上传文件的名称 private String name;//上传文件的名称
......
package com.zjty.efs.ftp.entity; package com.zjty.efs.ftp.entity;
import com.zjty.efs.misc.config.AutoDocument; import com.zjty.efs.misc.config.AutoDocument;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
...@@ -11,6 +13,7 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -11,6 +13,7 @@ import org.springframework.web.multipart.MultipartFile;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Data @Data
@ApiModel(value = "文件上传",description = "文件上传请求体")
public class UploadRequest { public class UploadRequest {
@ApiModelProperty(value = "multipartFile",notes = "文件数据") @ApiModelProperty(value = "multipartFile",notes = "文件数据")
private MultipartFile multipartFile;//文件 private MultipartFile multipartFile;//文件
......
package com.zjty.efs.ftp.service;
import com.zjty.efs.ftp.base.response.ServerResponse;
import java.util.List;
public interface FileSaveService {
/**
* 根据文件id查询所有文件
* @param idList
* @return
*/
ServerResponse getFiles(List<Integer> idList);
}
package com.zjty.efs.ftp.service.impl;
import com.zjty.efs.ftp.base.response.ServerResponse;
import com.zjty.efs.ftp.dao.FileSaveDao;
import com.zjty.efs.ftp.service.FileSaveService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class FileSaveServiceImpl implements FileSaveService {
@Autowired
private FileSaveDao fileSaveDao;
@Override
public ServerResponse getFiles(List<Integer> idList) {
return ServerResponse.success(fileSaveDao.findByIdIn(idList));
}
}
package com.zjty.efs.ftp.service.impl; package com.zjty.efs.ftp.service.impl;
import com.zjty.efs.ftp.base.response.ServerResponse; import com.zjty.efs.ftp.base.response.ServerResponse;
import com.zjty.efs.ftp.dao.FileSaveDao;
import com.zjty.efs.ftp.entity.*; import com.zjty.efs.ftp.entity.*;
import com.zjty.efs.ftp.service.FileUploadService; import com.zjty.efs.ftp.service.FileUploadService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
...@@ -21,6 +23,8 @@ public class FileUploadServiceImpl implements FileUploadService { ...@@ -21,6 +23,8 @@ public class FileUploadServiceImpl implements FileUploadService {
@Value("${file.address}") @Value("${file.address}")
private String fileAddress; private String fileAddress;
@Autowired
private FileSaveDao fileSaveDao;
/** /**
* 前台文件上传 * 前台文件上传
...@@ -111,6 +115,7 @@ public class FileUploadServiceImpl implements FileUploadService { ...@@ -111,6 +115,7 @@ public class FileUploadServiceImpl implements FileUploadService {
exist = 1; exist = 1;
} }
chunkResponse.setExist(exist); chunkResponse.setExist(exist);
chunkResponses.add(chunkResponse);
} }
} }
return ServerResponse.success(chunkResponses); return ServerResponse.success(chunkResponses);
...@@ -151,19 +156,20 @@ public class FileUploadServiceImpl implements FileUploadService { ...@@ -151,19 +156,20 @@ public class FileUploadServiceImpl implements FileUploadService {
@Override @Override
public ServerResponse merge(List<MergeRequest> uploadRequests) { public ServerResponse merge(List<MergeRequest> uploadRequests) {
List<MergeResponse> fileReturns = new ArrayList<>(); List<FileSave> fileSaves = new ArrayList<>();//文件保存集合
if(uploadRequests != null && uploadRequests.size() != 0){ if(uploadRequests != null && uploadRequests.size() != 0){
for(MergeRequest mergeRequest: uploadRequests){ for(MergeRequest mergeRequest: uploadRequests){
MergeResponse fileReturn = new MergeResponse(); FileSave fileSave = new FileSave();
String md5File = mergeRequest.getMd5File(); String md5File = mergeRequest.getMd5File();
Integer chunks = mergeRequest.getChuck(); Integer chunks = mergeRequest.getChuck();
String name = mergeRequest.getName(); String name = mergeRequest.getName();
fileReturn.setName(name);//放入文件名称 fileSave.setFileName(name);//放入文件名称
fileReturn.setPath(fileAddress + "/" + name);//文件存储地址 fileSave.setPath(fileAddress + "/" + name);//文件存储地址
fileReturn.setSaveSuccess(1);//默认保存成功,如果失败,重新set为0
FileOutputStream fileOutputStream = null; //合成后的文件 FileOutputStream fileOutputStream = null; //合成后的文件
try { try {
fileOutputStream = new FileOutputStream(fileAddress + "/" + name); String savePath = rename(fileAddress + "/" + name,0);
fileSave.setRealName(new File(savePath).getName());
fileOutputStream = new FileOutputStream(savePath);
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
} }
...@@ -182,11 +188,10 @@ public class FileUploadServiceImpl implements FileUploadService { ...@@ -182,11 +188,10 @@ public class FileUploadServiceImpl implements FileUploadService {
//删除md5目录,及临时文件 //删除md5目录,及临时文件
deleteFile(new File(fileAddress + "/" + md5File)); deleteFile(new File(fileAddress + "/" + md5File));
} catch (Exception e) { } catch (Exception e) {
fileReturn.setSaveSuccess(0);//保存失败 log.error(fileSave.getPath() + "文件保存失败");
log.error(fileReturn.getPath() + "文件保存失败");
}finally { }finally {
try { try {
fileReturns.add(fileReturn); fileSaves.add(fileSave);
fileOutputStream.close(); fileOutputStream.close();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
...@@ -194,7 +199,30 @@ public class FileUploadServiceImpl implements FileUploadService { ...@@ -194,7 +199,30 @@ public class FileUploadServiceImpl implements FileUploadService {
} }
} }
} }
return ServerResponse.success(fileReturns); List<FileSave> fileSaveList = fileSaveDao.saveAll(fileSaves);
List<Integer> integers = new ArrayList<>();//文件id集合
fileSaveList.forEach(f -> integers.add(f.getId()));
return ServerResponse.success(integers);
}
/**
* 名字出现重复,重新命名
* @param name 文件名称,包括路径
* @return
*/
public static String rename(String name,int i){
File file = new File(name);
String fileName = file.getName();
String path = file.getParent();
String[] fileArray = fileName.split("\\.");
if(file.exists()){
if(fileArray[0].contains("(")){
fileArray[0] = fileArray[0].substring(0,fileArray[0].indexOf("(") - 1);
}
i++;
return rename(path + "/" + fileArray[0] + " (" + i + ")." + fileArray[1],i);
}
return name;
} }
/** /**
......
...@@ -4,4 +4,16 @@ server.port=8093 ...@@ -4,4 +4,16 @@ server.port=8093
spring.servlet.multipart.max-file-size=100MB spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB spring.servlet.multipart.max-request-size=100MB
file.address=/file/uploads file.address=/file/uploads
\ No newline at end of file
##连接中心数据库数据库mysql
spring.datasource.url=jdbc:mysql://localhost:3306/ty_efs?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
# spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.open-in-view=true
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论