为了项目管理系统方便后期更适合分布式部署,改原来的磁盘存储改存在mongodb的 gridfs中
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
上传保存
/**
* 保存上传文件
* @param file
* @return
*/
public String saveFile(MultipartFile multipartFile) {
HashMap<String, String> map = new HashMap<String, String>();
try (InputStream inputStream = multipartFile.getInputStream();) {
// 获取文件的源名称
String fileName = multipartFile.getOriginalFilename();
// 进行文件存储
ObjectId objectId = gridFsTemplate.store(inputStream, fileName, map);
// 返回文件的id
return objectId.toHexString();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
查询文件
/**
* 据id返回文件
*/
public byte[] getFile(String fileId) {
// 根据id查询文件
GridFSFile gridFSFile = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(fileId)));
if (gridFSFile == null) {
throw new RuntimeException("No file with id: " + fileId);
}
// 获取流对象
GridFsResource resource = gridFsTemplate.getResource(gridFSFile);
/* 可根据实际需求进行数据的获取 */
try {
// 获取流中的数据
// String content = IOUtils.toString(resource.getInputStream(), "UTF-8");
// 获取byte[]信息
byte[] bytes = IOUtils.toByteArray(resource.getInputStream());
return bytes;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
删除文件
/**
* 删除
* @param id
*/
public void removeFile(String fileId) {
// 根据文件id删除fs.files和fs.chunks中的记录
gridFsTemplate.delete(Query.query(Criteria.where("_id").is(fileId)));
}
资料.docx