最近一直在搞负载均衡一块的东西,遇到了一个问题就是文件相关的。这个问题是这样的,一般情况下,我们文件都是存在服务器的本地路上上,正常情况下,完全没问题,但是当服务需要搭负载均衡时,这种文件存储方式的问题就显现出来了。例如我的文件在A服务器上面,当访问B服务器时,就会找不到这个文件,所以我就想办法解决这个问题,无意中发现MongoDB可以存储文件(也不是没想过用数据库存,只是觉得数据库会效率很低),所以决定试一下。
下载地址:https://www.mongodb.com/download-center
全部选择下一步默认即可,也可以更改一下安装路径,毕竟用来存储文件可能会比较占地方。
下载地址:https://robomongo.org/
直接点下一步,默认安装即可。
MongoDB 默认不需要用户名密码,默认端口是27017,直接用管理工具连接就可以。
我手动创建了一个库,如下:
安装图中的包,其他的依赖会自动安装。
public class MongoFactory { // 读取连接字符串 “mongodb://127.0.0.1:27017” private static string strCon = ConfigurationManager.ConnectionStrings["MongoDBConnStr"].ConnectionString; private static IMongoDatabase mongoContext; static MongoFactory() { GetMongoContext(); } public static void GetMongoContext() { var client = new MongoClient(strCon); if (client != null) { //通过数据库名获得上下文 名称可以配置到配置文件里 mongoContext = client.GetDatabase("TestDB"); } } /// <summary> /// 上传文件(流) /// </summary> /// <param name="bucketName">相当于文件夹名</param> /// <param name="fileName">文件名</param> /// <param name="fs">文件流</param> /// <returns></returns> public static ObjectId UploadFile(string bucketName, string fileName, Stream fs) { GridFSBucketOptions options = new GridFSBucketOptions(); options.BucketName = bucketName; var bucket = new GridFSBucket(mongoContext, options); var oid = bucket.UploadFromStream(fileName, fs); return oid; } /// <summary> /// 获得文件字节数组 /// </summary> /// <param name="bucketName"></param> /// <param name="fileId"></param> /// <returns></returns> public static Byte[] GetFileBytes(string bucketName, string fileId) { GridFSBucketOptions options = new GridFSBucketOptions(); options.BucketName = bucketName; var bucket = new GridFSBucket(mongoContext, options); return bucket.DownloadAsBytes(new ObjectId(fileId)); } /// <summary> /// 获得文件流 /// </summary> /// <param name="bucketName"></param> /// <param name="fileId"></param> /// <returns></returns> public static Stream GetFileStream(string bucketName, string fileId) { MemoryStream stream = new MemoryStream(); GridFSBucketOptions options = new GridFSBucketOptions(); options.BucketName = bucketName; var bucket = new GridFSBucket(mongoContext, options); bucket.DownloadToStream(new ObjectId(fileId), stream); return stream; } }
Demo地址:https://github.com/923887863/MongoFileDemo.git
原文:https://www.cnblogs.com/Yuuuuu/p/10128284.html