当前位置:
mongoDB 使用 GridFsTemplate 存储文件
机器助手 | 2025-07-13
71人浏览
/**
* @author hujunbo
* @date 2023/2/7
*/
@Component
public class MongoFileStorageDao implements FileStorageDao {
@Autowired
private GridFsTemplate gridFsTemplate;
@Resource
private FilePropertiesConfig filePropertiesConfig;
@Override
public InputStream getFileInputStream(FileInfo mongoFileInfo) {
if(ObjectUtils.isEmpty(mongoFileInfo) || StringUtils.isBlank(mongoFileInfo.getFileId())){
return null;
}
return getFileInputStream(mongoFileInfo.getFileId());
}
@Override
public String getDownloadUrl(String fileId) {
return filePropertiesConfig.getDomain() + filePropertiesConfig.getPrefix() + "/download/" + fileId;
}
@Override
public String getPreviewUrl(String fileId) {
return filePropertiesConfig.getDomain() + filePropertiesConfig.getPrefix() + "/preview/" + fileId;
}
@Override
public Integer deleteFileById(String fileId) {
this.deleteFile(fileId);
return 1;
}
public String store(String fileName, File file) throws Exception {
return gridFsTemplate.store(new FileInputStream(file), fileName).toString();
}
public String store(String fileName,InputStream inputStream){
return gridFsTemplate.store(inputStream, fileName).toString();
}
public GridFSFile find(ObjectId objectId) {
return gridFsTemplate.findOne(Query.query(Criteria.where(DomainFieldConstants.ID).is(objectId)));
}
public void deleteFile(String fileId){
gridFsTemplate.delete(Query.query(Criteria.where(DomainFieldConstants.ID).is(fileId)));
}
public GridFSFile find(String id) {
return find(new ObjectId(id));
}
public InputStream getFileInputStream(String fileId) {
GridFsResource resource = gridFsTemplate.getResource(find(fileId));
InputStream inputStream = null;
try {
inputStream = resource.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
return inputStream;
}
public File getFile(String id) {
GridFSFile gridFSFile = find(new ObjectId(id));
GridFsResource resource = gridFsTemplate.getResource(gridFSFile);
try {
return resource.getFile();
} catch (IOException e) {
e.printStackTrace();
}
InputStream inputStream = null;
File file = new File(getAbsoluteFile(gridFSFile.getFilename()));
FileOutputStream fileOutputStream = null;
try {
inputStream = resource.getInputStream();
fileOutputStream = new FileOutputStream(getAbsoluteFile(gridFSFile.getFilename()));
byte[] bytes = new byte[1024];
while (inputStream.read(bytes) > 0) {
fileOutputStream.write(bytes);
}
fileOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
file.delete();
IoUtil.close(inputStream);
IoUtil.close(fileOutputStream);
}
return file;
}
private String getAbsoluteFile(String filename) {
String downloadPath = filePropertiesConfig.getPath() + filename;
File desc = new File(downloadPath);
if(!desc.getParentFile().exists()){
desc.getParentFile().mkdirs();
}
return downloadPath;
}
public FileInfo upload(FileInfo fileInfo, InputStream inputStream) {
if (ObjectUtils.isEmpty(fileInfo)) {
return null;
}
try {
String fileId = this.store(fileInfo.getFileName(), inputStream);
fileInfo.setFileId(fileId);
}finally {
IoUtil.close(inputStream);
}
return fileInfo;
}
}
