spring boot 使用 mongodb gridfs 存储文件

发布时间:2022-05-31 21:51:31

为了项目管理系统方便后期更适合分布式部署,改原来的磁盘存储改存在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

Card image cap
APP STORE
Card image cap
应用宝
Card image cap
小米
Card image cap
华为