【发布时间】:2014-10-19 13:51:49
【问题描述】:
我正在尝试使用 Spring 使用 GridF 存储和检索图像。
上传方法1:
public void savePicture(InputStream photo, Customer customer) {
Query query = new Query (Criteria.where("filename").is(customer.getId()).and("metadata.status").is("active"));
Update update = new Update().set("metadata.status" , "false");
WriteResult wr = this.mongoTemplate.updateFirst(query, update, "fs.files");
if (!wr.getLastConcern().callGetLastError()){
DBObject metaData = new BasicDBObject();
metaData.put("status", "active");
String imageFormat = this.imageUtils.getImageFormat(photo);
String contentType = "image/" + imageFormat;
GridFSFile gridFsFile = this.gridFsTemplate.store(photo, customer.getId(), contentType, metaData);
}
}
上传方法2(仅在调用this.gridFsTemplage.store时不同)
public void saveProfilePicture(InputStream photo, Customer customer) {
Query query = new Query (Criteria.where("filename").is(customer.getId()).and("metadata.status").is("active"));
Update update = new Update().set("metadata.status" , "false");
WriteResult wr = this.mongoTemplate.updateFirst(query, update, "fs.files");
if (!wr.getLastConcern().callGetLastError()){
DBObject metaData = new BasicDBObject();
metaData.put("status", "active");
GridFSFile gridFsFile = this.gridFsTemplate.store(photo, customer.getId(), metaData);
}
}
下载方法:
public InputStream getPicture(Customer customer){
Query query = new Query(Criteria.where("filename").is(customer.getId()).and("metadata.status").is("active"));
GridFSDBFile gridFsDBFile = this.gridFsTemplate.findOne(query);
return gridFsDBFile.getInputStream();
}
在 MongoDB/GridFS 上上传工作和写入的两种方法,但是当我使用方法 1 时,我无法下载图片并且它似乎已损坏。例如,如果我上传一张 7.8KB 的图片,下载的版本是 500 字节 (7.3KB),我无法使用图像查看器打开它。 当我使用方法 2 上传时,一切正常。
有什么想法吗?
【问题讨论】:
标签: java spring mongodb spring-data gridfs