最近項目由於要存儲圖片和文件,折騰了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的使用都是異步的,這個在使用過程當中也須要稍微注意下。