#mongodb #spring-boot #file
Вопрос:
У меня есть модуль в весенней загрузке,я работаю с mongodb, речь идет о загрузке и загрузке файла, когда я пытаюсь загрузить и загрузить файл, оба они работают, но я не смог открыть загруженный файл, и ошибка в том, что этот файл не может быть прочитан, и это недопустимый растровый файл или этот формат не поддерживается
@RestController public class FileController { private FileService fileService; public FileController(FileService fileService) { this.fileService = fileService; } @PostMapping("/upload") public ResponseEntitylt;?gt; upload(@RequestParam("file") MultipartFile file) throws IOException { return new ResponseEntitylt;gt;(fileService.addFile(file), HttpStatus.OK); } @GetMapping("/download/{id}") public ResponseEntitylt;ByteArrayResourcegt; download(@PathVariable String id) throws IOException { LoadFile loadFile = fileService.downloadFile(id); return ResponseEntity.ok() .contentType(MediaType.parseMediaType(loadFile.getFileType() )) .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename="" loadFile.getFilename() """) .body(new ByteArrayResource(loadFile.getFile())); } }
Моя служба
@Service public class FileService { private GridFsTemplate template; private GridFsOperations operations; public FileService(GridFsTemplate template, GridFsOperations operations) { this.template = template; this.operations = operations; } public String addFile(MultipartFile upload) throws IOException { //define additional metadata DBObject metadata = new BasicDBObject(); metadata.put("fileSize", upload.getSize()); //store in database which returns the objectID Object fileID = template.store(upload.getInputStream(), upload.getOriginalFilename(), upload.getContentType(), metadata); //return as a string return fileID.toString(); } public LoadFile downloadFile(String id) throws IOException { //search file GridFSFile gridFSFile = template.findOne( new Query(Criteria.where("_id").is(id)) ); //convert uri to byteArray //save data to LoadFile class LoadFile loadFile = new LoadFile(); if (gridFSFile != null amp;amp; gridFSFile.getMetadata() != null) { loadFile.setFilename( gridFSFile.getFilename() ); loadFile.setFileType( gridFSFile.getMetadata().get("_contentType").toString() ); loadFile.setFileSize( gridFSFile.getMetadata().get("fileSize").toString() ); loadFile.setFile( IOUtils.toByteArray(operations.getResource(gridFSFile).getInputStream()) ); } return loadFile; } }