package cn.vant.mongo;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.data.document.mongodb.MongoTemplate;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBObject;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSInputFile;
/**
* Mongodb对文件的操作
*
* @author zhang.ai.jun
*
*/
public
class MongoFileUtils {
/**
* 写入文件
* @param mongoTemplate 公共调用函数模板
* @param file 文件
* @param fileid 文件id
* @param companyid 文件的公司id
* @param filename 文件名称
* @date 2018-3-8 下午02:20:41
*/
public void SaveFile(MongoTemplate mongoTemplate, File file, String fileid, String companyid, String filename) {
try {
InputStream input =
new FileInputStream(file);
DB db = mongoTemplate.getDb();
GridFS gridFS =
new GridFS(db,
"fs");
GridFSInputFile gfs = gridFS.createFile(input);
gfs.put(
"aliases", companyid);
gfs.put(
"fileid", fileid);
gfs.put(
"filename", filename);
gfs.put(
"path",file.getPath());
gfs.save();
input.close();
}
catch (Exception e) {
e.printStackTrace();
System.out.println(
"存储文件时发生错误!!!");
}
}
/**
* 文件的读取功能
* @Title: MongoFileUtils.java
* @param mongoTemplate 公共调用函数模板
* @param fileid 文件id
* @param filePath 输出文件路径
* @Package cn.vant.mongo
* @date 2018-3-8 下午04:43:45
* @version V1.0
*/
public void loadFileOne(MongoTemplate mongoTemplate,String fileid,String filePath){
try{
DBObject employees =
new BasicDBObject();
DB db = mongoTemplate.getDb();
GridFS gridFS =
new GridFS(db,
"fs");
employees = gridFS.findOne(fileid);
byte[] files = (
byte[]) employees.get(
"member");
ByteArrayInputStream input =
new ByteArrayInputStream(files);
File f =
new File(filePath);
FileOutputStream output =
new FileOutputStream(f);
byte[] b=
new
byte[input.available()];
while (input.read(b)>
0) {
input.read(b);
output.write(files);
}
input.close();
output.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* 取出文件到本地
* @Title: MongoFileUtils.java
* @Package cn.vant.mongo
* @date 2018-3-8 下午02:21:41
* @version V1.0
*/
public void retrieveFileOne(MongoTemplate mongoTemplate,String fileid,String filePath) {
try{
DB db = mongoTemplate.getDb();
GridFS gridFS =
new GridFS(db,
"fs");
//查询的结果:
GridFSDBFile gridDBFile =gridFS.findOne(fileid);
String fileName=(String)gridDBFile.get(
"filename");
System.out.println(
"从Mongodb获得文件名为:"+fileName);
File writeFile=
new File(filePath+fileName);
if(!writeFile.exists()){
writeFile.createNewFile();
}
//把数据写入磁盘中
//写入文件中
gridDBFile.writeTo(writeFile);
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* 查询文件列表
* @Title: MongoFileUtils.java
* @Package cn.vant.mongo * @date 2018-3-8 下午06:25:31
* @version V1.0
*/
public List<GridFSDBFile> fileList(MongoTemplate mongoTemplate,Map map){
DB db = mongoTemplate.getDb();
GridFS gridFS =
new GridFS(db);
// 查找条件
DBObject query =
new BasicDBObject();
String fileid = map.get(
"fileid").toString();
String filename = map.get(
"filename").toString();
String collection = map.get(
"collection").toString();
String contentType = map.get(
"contentType").toString();
if (fileid !=
null) {
query.put(
"fileid", fileid);
}
if (filename !=
null) {
query.put(
"filename", filename);
}
if (collection !=
null) {
query.put(
"collection", collection);
}
if (contentType !=
null) {
query.put(
"contentType", contentType);
}
//查询的结果:
List<GridFSDBFile> listFile =gridFS.find(fileid);
return listFile;
}
/**
* mongodb服务器下载文件
* @Title: MongoFileUtils.java
* @Package cn.vant.mongo
* @date 2018-3-8 下午06:09:39
* @version V1.0
*/
public void downloadFile(MongoTemplate mongoTemplate,String fileid,HttpServletRequest req, HttpServletResponse res) {
try {
String appDir = req.getParameter(
"appDir");
String filename = req.getParameter(
"filename");
System.out.println(
"打印参数:appDir=" + appDir +
",filename=" + filename);
DB db = mongoTemplate.getDb();
GridFS gridFS =
new GridFS(db,
"fs");
GridFSDBFile gridFSDBFile = (GridFSDBFile)gridFS.findOne(fileid);
if (gridFSDBFile !=
null){
OutputStream sos = res.getOutputStream();
res.setCharacterEncoding(
"UTF-8");
res.setHeader(
"Access-Control-Allow-Origin",
"*");
res.setContentType(
"application/octet-stream");
res.addHeader(
"Content-Disposition",
"attachment; filename=\"" + filename +
"\"");
gridFSDBFile.writeTo(sos);
sos.flush();
sos.close();
}
}
catch (Exception e) {
System.out.println(
"下载文件异常 ...");
e.printStackTrace();
}
}
/**
* 删除文档
* @Title: MongoFileUtils.java
* @Package cn.vant.mongo
* @date 2018-3-8 下午05:20:11
* @version V1.0
*/
public void deleteFileOne(MongoTemplate mongoTemplate,String fileid){
DB db = mongoTemplate.getDb();
GridFS gridFS =
new GridFS(db,
"File");
gridFS.remove(fileid);
}
}