我有一个 REST 服务来上传图片,这是负责在 mongodb 中注册的主要代码:
public String writeFiles(InputStream inputStream, String fileName, String contentType) throws IOException {
// save the file
GridFS gridFS = new GridFS(getDB(), Collections.PICTURES_FILES.name());
GridFSInputFile gridFSInputFile = gridFS.createFile(inputStream, fileName);
gridFSInputFile.setContentType(contentType);
gridFSInputFile.setMetaData(new BasicDBObject(ORIGINAL_PICT_COL, true));
gridFSInputFile.save();
return gridFSInputFile.getId();
}
然后服务将文件 ID 返回给客户端,以便客户端可以请求并显示上传的图像。
问题在于非常大的图像:有时在上传后立即通过其 ID 请求图像时会出现 HTTP 404 错误(由于服务器端的图像 ID 未知,这是正确的行为)。我想这是因为服务器端的注册时间大于用于取回 ID 并在客户端请求新图像的时间——即“.save()”操作是异步的,对吗?
我的问题:在返回给定代码中的 ID 之前,如何确保保存操作已完成?或者如何获取 .insert 操作的结果对象?
做一个
gridFSInputFile.validate();
就够了吗?
或者
getDB().getLastError()
?
我不能轻易地重现这个“错误”,所以我问这个问题,以防有经验的人已经知道如何解决这个问题。在此先感谢您的帮助。