零、前言

由于前段时间一直在找工作,找到工作后又比较忙,又加班又通宵的赶项目,所以博客有段时间没有更新了。

今天稍微空闲一点,碰巧前几天看到有园友问我Nancy中下载文件的问题,然后就趁着休息的时间写下了这篇博客。

直接进正题吧!
 

一、新建一个空的asp.net应用程序

通过nuget安装相应的packages
 

二、添加Modules和Views文件夹

用于存放我们的“控制器”和视图(这一步不是必须的喔!)
 

三、新建CustomRootPathProvider.cs

具体如下:

     public class CustomRootPathProvider : IRootPathProvider
{
public string GetRootPath()
{
return AppDomain.CurrentDomain.GetData(".appPath").ToString();
}
}

四、编写Bootstrapper.cs

具体如下:
 
     public class Bootstrapper : DefaultNancyBootstrapper
{
protected override IRootPathProvider RootPathProvider
{
get
{
return new CustomRootPathProvider();
}
}
}

五、编写Module

这里我是新建了一个HomeModule.cs
需要注意的是,要在构造函数中添加一点东西
IRootPathProvider pathProvider  
 
下面贴上HomeModule.cs的完整代码
 
 using Nancy;
using System.Collections.Generic;
using System.IO; namespace NancyUpLoadAndDownloadDemo.Modules
{
public class HomeModule : NancyModule
{
public HomeModule(IRootPathProvider pathProvider) : base("/")
{
var uploadDirectory = Path.Combine(pathProvider.GetRootPath(), "Content", "uploads"); Get["/"] = _ =>
{
return View["UpLoad"];
}; Post["/"] = _ =>
{ if (!Directory.Exists(uploadDirectory))
{
Directory.CreateDirectory(uploadDirectory);
} foreach (var file in Request.Files)
{
var filename = Path.Combine(uploadDirectory, file.Name);
using (FileStream fileStream = new FileStream(filename, FileMode.Create))
{
file.Value.CopyTo(fileStream);
}
}
return Response.AsRedirect("/show") ;
}; Get["/down/{name}"] = _ =>
{
string fileName = _.name;
var relatePath = @"Content\uploads\"+fileName;
return Response.AsFile(relatePath);
}; Get["/show"] = _ =>
{
var folder = new DirectoryInfo(uploadDirectory);
IList<string> files = new List<string>();
foreach (var file in folder.GetFiles())
{
files.Add(file.Name);
}
return View["Show", files];
};
}
}
}
 
下面简单说一下这些是用来干嘛的:
Get["/"]   显示upload这个页面
Post["/"]   上传文件的
Get["/down/{name}"]   下载文件,{name}是参数 文件名
Get["/show"]  显示可下载的文件
 
上传文件和下载文件的具体细节会在看完演示后细说。
 

六、建立视图

 
Show.cshtml
 @{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
<ul>
@foreach (var item in Model)
{
<li>
<a href="/down/@item">
@item
</a>
</li>
}
</ul>
</body>
</html>
UpLoad.cshtml
 
 @{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>UpLoad</title>
</head>
<body>
<h1>这是上传文件的演示</h1>
<hr />
<form action="/" method="post" enctype="multipart/form-data"> <div>
<label>请选择要上传的文件</label>
<input type="file" name="myFile" />
</div>
<div>
<input type="submit" value="上传" />
</div> </form>
</body>
</html>
视图就比较简单,没什么样式。就是简单的列出文件名称和上传文件的表单
 
下面来看看效果:
 
 
 
 
就这样完成了简单的上传和下载功能,也是挺简单的。
 

七、上传与下载的细节

上传:
相信之前大家在asp.net中进行上传时,下面这个httppostedfilebase类,肯定是经常用的
 
但是这个是基于system.web的,而Nancy是不依赖于system.web的!!!那么Nancy是怎么处理这个的呢
 
Nancy有自己的一套东西来处理这个,可以看看这个类
 
也可以看看httppostfilebase这个类
 
像处理这些问题,Nancy都有自己的实现,用起来跟平常的用法有点区别,这个是需要注意的!!
 
还有一个要注意的是路径的问题,这个问题可以参见
 
下载:
在asp.net mvc中,下载我们用的比较多的是 fileresult
 
其实,Nancy也提供了类似的方法
用法就是 response.asfile()
可以参见下面的
 

Nancy之文件上传与下载的更多相关文章

  1. java web学习总结(二十四) -------------------Servlet文件上传和下载的实现

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  2. (转载)JavaWeb学习总结(五十)——文件上传和下载

    源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...

  3. JavaWeb学习总结,文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  4. java文件上传和下载

    简介 文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...

  5. 使用jsp/servlet简单实现文件上传与下载

    使用JSP/Servlet简单实现文件上传与下载    通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...

  6. JavaWeb学习总结(五十)——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  7. 文件上传和下载(可批量上传)——Spring(三)

    在文件上传和下载(可批量上传)——Spring(二)的基础上,发现了文件下载时,只有在Chrome浏览器下文件名正常显示,还有发布到服务器后,不能上传到指定的文件夹目录,如上传20160310.txt ...

  8. 文件上传和下载(可批量上传)——Spring(二)

    针对SpringMVC的文件上传和下载.下载用之前“文件上传和下载——基础(一)”的依然可以,但是上传功能要修改,这是因为springMVC 都为我们封装好成自己的文件对象了,转换的过程就在我们所配置 ...

  9. Struts2 之 实现文件上传和下载

    Struts2  之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ...

随机推荐

  1. LA

    grmon -altjtag -u 公式rand()%(b-a),是求范围随机数的计算公式,%是做求余运算,正整数对n求余的范围肯定是在0~n-1之间,也就是rand()%(b-a)的范围是0~b-a ...

  2. Reactive Extensions(Rx) 学习

    Bruce Eckel(著有多部编程书籍)和Jonas Boner(Akka的缔造者和Typesafe的CTO)发表了“反应性宣言”,在其中尝试着定义什么是反应性应用. 这样的应用应该能够: 对事件做 ...

  3. ASP.NET MVC Module

    ASP.NET MVC Module 前言 在ASP.NET中管道模型是怎么来实现的?在请求处理流程一文中大概的讲述了Http Module和HttpApplication之间的关系,而并没有涉及到H ...

  4. [ASP.NET Web API]如何Host定义在独立程序集中的Controller

    通过<ASP.NET Web API的Controller是如何被创建的?>的介绍我们知道默认ASP.NET Web API在Self Host寄宿模式下用于解析程序集的Assemblie ...

  5. 当MyEclipse突然异常关闭

    今天的博文主要记录一个问题,就是当MyEclipse异常关闭后,再次开启环境,导致Tomcat无法启动的问题解决方案 问题描述:在MyEclipse启动或者是tomcat启动的时候出现:Address ...

  6. css+div常用属性备忘录

    学习软件设计有一年多了,明年五月就要毕业了.回头看看发现自己其实挺差劲的. 最近开通了博客所以就整理了一下笔记,在这里发布一下自己以前学习css时总是记不住去翻书又很常用的属性,都是一些很基础的. 大 ...

  7. Javascript算法系列之快速排序(Quicksort)

    原文出自: http://www.nczonline.net/blog/2012/11/27/computer-science-in-javascript-quicksort/ https://gis ...

  8. 理解javascript中的浏览器窗口——窗口基本操作

    × 目录 [1]窗口位置 [2]窗口大小 [3]打开窗口[4]关闭窗口 前面的话 BOM全称是brower object model(浏览器对象模型),主要用于管理窗口及窗口间的通讯,其核心对象是wi ...

  9. 在Linux客户机与Windows宿主机之间建立共享(VitrualBox)

    VirtualBox中,如果客户机和宿主机都是Windows的话,共享相对是比较方便的.一般是通过\\vboxsvr\shared 这样的路径访问即可. 但是如果客户机是Linux的话,就略微麻烦一点 ...

  10. jquery EasyUI的formatter格式化函数代码

    要格式化数据表格列,需要设置formatter属性,该属性是一个函数,它包含两个参数:  value: 对应字段的当前列的值  record: 当前行的记录数据  复制代码 代码如下: $('#tt' ...