123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- package ieven.server.webapp.api;
- import com.mongodb.client.gridfs.model.GridFSFile;
- import ieven.server.webapp.domain.file.FileListInput;
- import ieven.server.webapp.domain.file.FileService;
- import ieven.server.webapp.domain.file.LogicalFile;
- import ieven.server.webapp.infrastructure.wrapper.Mapped;
- import ieven.server.webapp.model.UploadedFile;
- import ieven.server.webapp.model.display.UploadedFileDisplay;
- import ieven.server.webapp.util.Common;
- import ieven.server.webapp.util.Properties;
- import io.swagger.annotations.Api;
- import org.apache.commons.lang3.StringUtils;
- import org.bson.types.ObjectId;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.mongodb.core.MongoTemplate;
- import org.springframework.data.mongodb.core.query.Criteria;
- import org.springframework.data.mongodb.core.query.Query;
- import org.springframework.data.mongodb.gridfs.GridFsOperations;
- import org.springframework.data.mongodb.gridfs.GridFsTemplate;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.multipart.MultipartFile;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.nio.charset.StandardCharsets;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.logging.Logger;
- @RestController
- @RequestMapping("/file")
- @Api(value = "文件操作接口")
- public class FileController {
- private final Logger logger = Logger.getLogger("UploadController");
- @Autowired
- private GridFsOperations gridFsOperations;
- @Autowired
- private MongoTemplate mongoTemplate;
- @Autowired
- private FileService fileService;
- //上传文件
- @PostMapping("/uploadSingle")
- public Mapped uploadSingle(@RequestParam MultipartFile file, @RequestParam String modelId) {
- //异步读取数据并存储到mongo
- return fileService.storeUploaded(file, modelId);
- }
- //列出已上传文件
- @PostMapping("/uploadedList")
- public Mapped listUploaded(@RequestBody FileListInput fileListInput) {
- return fileService.listUploaded(fileListInput);
- }
- //删除已上传的文件
- @PostMapping("/deleteUploaded")
- public Map<String, Object> deleteUploaded(@RequestBody Map<String, Object> jsonMap) {
- String fileId = (String) jsonMap.getOrDefault("id", "");
- if (StringUtils.isBlank(fileId)) {
- return Common.errorMapWithPage("未找到参数");
- }
- Query queryUploaded = new Query(Criteria.where("_id").is(new ObjectId(fileId)));
- mongoTemplate.remove(queryUploaded, Properties.COLLECTION_UPLOADED);
- Query queryData = new Query(Criteria.where("fileId").is(fileId));
- mongoTemplate.remove(queryData, Properties.COLLECTION_DATA);
- gridFsOperations.delete(queryUploaded);
- Map<String, Object> res = new HashMap<>();
- res.put("code", 200);
- res.put("result", "");
- return res;
- }
- @GetMapping("/downloadById")
- public void downloadById(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> jsonMap) {
- String fileId = (String) jsonMap.getOrDefault("id", "");
- GridFSFile gridFSFile = gridFsOperations.findOne(new Query(Criteria.where("_id").is(new ObjectId(fileId))));
- if (gridFSFile == null) {
- return;
- }
- String filename = gridFSFile.getFilename();
- try {
- response.setHeader("Content-Type", "multipart/form-data");
- //设置下载的文件的名称-该方式已解决中文乱码问题
- response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
- response.setHeader("Content-Length", String.valueOf(gridFSFile.getLength()));
- OutputStream out = response.getOutputStream();
- InputStream input = gridFsOperations.getResource(gridFSFile).getInputStream();
- byte[] b = new byte[2048];
- int len;
- while ((len = input.read(b)) != -1) {
- out.write(b, 0, len);
- }
- input.close();
- } catch (IOException e) {
- logger.info("下载文件失败:" + filename);
- e.printStackTrace();
- }
- }
- }
|