前言

最近项目因为要存储图片和文件,折腾了RavenDB,使用RavenDB的FS系统统一管理图片和文件。

安装

RavenDB 的FS文件系统,需要用到windows的远程差分压缩功能:

安装好之后下载RavenDB的zip包。

解压之后将目录下的Web 文件夹添加到IIS中:

IIS新站点设置完毕之后,接下来需要设置其对应的应用程序池,将版本设置为4.0 的集成模式:

按照官网的要求,还需将 禁用重叠回收设置为True:

设置RavenDB存储文件夹的读写权限,RavenDB的存储文件夹在web.config中:

以上说明RavenDB存储在E:\Raven文件夹中

运行

一切按照完毕,现在在IIS就直接运行,但万事开头难:

以上错误的以上,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的使用都是异步的,这个在使用过程中也需要稍微注意下。

最新文章

  1. iOS 创建一个可以点击并拖拽的Button
  2. 深入理解javascript系列(4):立即调用的函数表达式
  3. myBatis中 collection 或 association 联合查询 中column 传入多个参数值
  4. 利用Python实现从百度下载图片到本地磁盘
  5. C#连接数据库的四种方法(转)
  6. 文件传输基础——Java IO流
  7. 【php】目录、路径和文件 操作
  8. yii框架
  9. js判断是否是pc
  10. hibernate一对多关系配置
  11. python模块之paramiko
  12. poj 3007 Organize Your Train part II(静态字典树哈希)
  13. EF中的transaction的使用范例
  14. CentOS启动不显示图形界面直接进入命令行模式
  15. Container 组件
  16. Django Model Form
  17. [EXP]Apache Superset &lt; 0.23 - Remote Code Execution
  18. Linux&#160;时间及时区设置
  19. laravel 事件广播
  20. amoeba_mysql 读写分离

热门文章

  1. 常用 SQL 语句使用的总结
  2. add spring-boot-modules to maven project
  3. mysql加密解密方式用法
  4. Virtualbox 复制 CentOS 虚拟机无法联网
  5. 在github上搭建免费的博客
  6. 2017/4/25-SAX解析XML文件
  7. win7下安装memcached出现failed to install service or service already installed解决办法
  8. Java中的多线程Demo
  9. bzoj2876 [Noi2012]骑行川藏
  10. Linux学习之竿头直上