using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
using MongoDB.Driver.GridFS;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace MongoDBImage
{
public class ImageClass
{
private static MongoDatabase DB;
public static string fileTable = "xiandb";
public void Init1()
{
MongoServer server = MongoServer.Create("mongodb://localhost:27017/?safe=true");
DB = server.GetDatabase("wangboDB");
}
//获取图片
public void GetFileList(string queryName)
{
queryName = "wb";
Init1();
MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = fileTable };
MongoGridFS fs = new MongoGridFS(DB, fsSetting);
MongoCollection collection = DB.GetCollection(fileTable + ".files");
//排序方法-按照时间降序排列
SortByDocument sort = new SortByDocument {
{"filename", 1},
{"uploadDate", -1}
};
//关键字查询
string keyword = queryName;
Regex findby = new Regex(@"/" + keyword + "/", RegexOptions.IgnoreCase);
QueryDocument query = new QueryDocument
{
{"filename",findby}
};
MongoCursor docList = fs.Find(query).SetSortOrder(sort);
MongoGridFSFileInfo doc = fs.FindOne(query);
string FileName = doc.filename.tostring();
MongoGridFSStream stream = fs.OpenRead(FileName);
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
FileStream fswrite = new FileStream(@"c:\" + "test1.jpg", FileMode.Create, FileAccess.Write);
fswrite.Write(bytes, 0, bytes.Length);
fswrite.Flush();
fswrite.Close();
}
///
/// 上传文件
///
public void Upload()
{
try
{
Init1();
FileInfo file = new FileInfo("c:\\jpf.jpg");
FileStream ImageStream = file.Open(FileMode.Open);
int nFileLen = (int)ImageStream.Length;
MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = fileTable };
MongoGridFS fs = new MongoGridFS(DB, fsSetting);
byte[] myData = new Byte[nFileLen];
ImageStream.Read(myData, 0, nFileLen);
//调用Write、WriteByte、WriteLine函数时需要手动设置上传时间
//通过Metadata 添加附加信息
MongoGridFSCreateOptions option = new MongoGridFSCreateOptions();
option.UploadDate = DateTime.Now;
BsonDocument doc = new BsonDocument();
doc.Add("UserID", 1L);
option.Metadata = doc;
//创建文件,文件并存储数据
using (MongoGridFSStream gfs = fs.Create("c:\\jpf.jpg", option))
{
gfs.Write(myData, 0, nFileLen);
gfs.Close();
}
}
catch (Exception e)
{
}
}
///
/// 更新图片,通过文件名称进行查询,获取已存在图片的ID,新上传一张图片后,将原有图片删除;
///
public void updateImage()
{
Init1();
string ImageUrl = "c:\\jpf.jpg";
using (FileStream ImageStream = new FileStream(ImageUrl, FileMode.Open))
{
int ImageLen = (int)ImageStream.Length;
MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = fileTable };
MongoGridFS gridfs = new MongoGridFS(DB, fsSetting);
byte[] ImageData = new Byte[ImageLen];
ImageStream.Read(ImageData, 0, ImageLen);
MongoGridFSFileInfo ExistImage = gridfs.FindOne(Query.EQ("filename", "c:\\jpf.jpg"));
string id = ExistImage.Id.ToString();
MongoGridFSCreateOptions option = new MongoGridFSCreateOptions();
option.UploadDate = DateTime.Now;
BsonDocument doc = new BsonDocument();
doc.Add("company", "sxgis");
option.Metadata = doc;
using (MongoGridFSStream gfs = gridfs.Create("jpf.jpg", option))
{
gfs.Write(ImageData, 0, ImageLen);
gfs.Close();
}
ObjectId oid = new ObjectId(id);
gridfs.DeleteById(oid);
ImageStream.Close();
}
}
///
/// 上传图片方法二
///
public void upload2()
{
var server = MongoServer.Create("mongodb://localhost:27017/?safe=true");
var database = server.GetDatabase("xiandb");
var fileName = "C:\\wb.jpg";
var newFileName = "C:\\wb1.jpg";
using (var fs = new FileStream(fileName, FileMode.Open))
{
var gridFsInfo = database.GridFS.Upload(fs, fileName);
var fileId = gridFsInfo.Id.ToString();
ObjectId oid = new ObjectId(fileId);
var file = database.GridFS.FindOne(Query.EQ("_id", oid));
using (var stream = file.OpenRead())
{
var bytes = new byte[stream.Length];
stream.Read(bytes, 0, (int)stream.Length);
using (var newFs = new FileStream(newFileName, FileMode.Create))
{
newFs.Write(bytes, 0, bytes.Length);
}
}
}
}
}
}
|