最近项目由于要存储图片和文件,折腾了RavenDB,使用RavenDB的FS系通通一管理图片和文件。web
RavenDB 的FS文件系统,须要用到windows的远程差分压缩功能:windows
安装好以后下载RavenDB的zip包。api
解压以后将目录下的Web 文件夹添加到IIS中:安全
IIS新站点设置完毕以后,接下来须要设置其对应的应用程序池,将版本设置为4.0 的集成模式:session
按照官网的要求,还需将 禁用重叠回收设置为True:app
设置RavenDB存储文件夹的读写权限,RavenDB的存储文件夹在web.config中:异步
以上说明RavenDB存储在E:\Raven文件夹中spa
一切按照完毕,如今在IIS就直接运行,但万事开头难:.net
以上错误的以上,Raven.Web.Startp和系统的Startup冲突了,在appseting中咱们要显示的设置那个class:线程
<add key="owin:AppStartup" value="Raven.Web.Startup, Raven.Web, Version=3.5.4.0, Culture=neutral, PublicKeyToken=37f41c7f99471593" />
如今设置都完毕,如下就是我RavenDB的 studio界面,由于我已经添加了一些文件,界面和各位的不太一致:
一切准备就绪,如今使用代码来上传文件试试,首先在nuget上获取:
根据官网的文档,IFilesStore 为具体操做的入口,并且是线程安全的,因此建议一个应用程序使用一个IFilesStore,代码以下:
public class FilesStoreHolder { private static readonly Lazy<IFilesStore> store = new Lazy<IFilesStore>(CreateStore); public static IFilesStore Store { get { return store.Value; } } private static IFilesStore CreateStore() { IFilesStore fsStore = new FilesStore() { Url = "http://127.0.0.1:8090", DefaultFileSystem = "NorthwindFS" }.Initialize(); return fsStore; } }
而后上传用的接口为IAsyncFilesSession,经过其方法RegisterUpload就能够进行上传操做,具体代码以下:
IFilesStore store = FilesStoreHolder.Store; using (var session = store.OpenAsyncSession( new OpenFilesSessionOptions() { FileSystem = "NorthwindFS" })) { session.RegisterUpload("世界之窗.jpg", File.OpenRead(@"D:\DSCN6900.JPG")); await session.SaveChangesAsync(); }
下载的代码经过方法DownloadAsync,其返回是Stream:
using (IAsyncFilesSession session = store.OpenAsyncSession()) { using (Stream content = await session.DownloadAsync("世界之窗.jpg")) { content.CopyTo(new FileStream("aaa.jpg", FileMode.Create)); } }
RavenDB的安装配置还算是简单,但仍是有些坑须要注意,其api的使用都是异步的,这个在使用过程当中也须要稍微注意下。