零、前言

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

今天稍微空闲一点,碰巧前几天看到有园友问我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. 介绍.NET 开发必备工具 .NET Portability Analyzer

    随着.NET的原来越开放,不仅仅是开源这么简单了,也意味着.NET程序员要关注越来越多的平台,涵盖.NET Mic Framework, Xamarin,Mono,.NET等等,从windows到li ...

  2. C#中使用Socket请求Web服务器过程

    最开始我们需要明白一件事情,因为这是这篇文章的前提: HTTP协议只是一个应用层协议,它底层是通过TCP进行传输数据的.因此,浏览器访问Web服务器的过程必须先有“连接建立”的发生. 而有人或许会问: ...

  3. PC使用网线上网的条件下,通过PC的Wifi共享提供手机上网教程

    场景和目标 你有一个笔记本(或装有无线网卡的PC),可以通过网线上网,但是没有无线路由器.现在想要通过笔记本的无线网,让手机也能共享wifi上网. 环境 Win7 操作系统.带有无线网卡的PC或笔记本 ...

  4. 《Entity Framework 6 Recipes》中文翻译系列 (36) ------ 第六章 继承与建模高级应用之TPC继承映射

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-12  TPC继承映射建模 问题 你有两张或多张架构和数据类似的表,你想使用TP ...

  5. Android开发学习之路-让注解帮你简化代码,彻底抛弃findViewById

    本文主要是记录注解的使用的学习笔记,如有错误请提出. 在通常的情况下,我们在Activity中有一个View,我们要获得这个View的实例是要通过findViewById这个方法,然后这个方法返回的是 ...

  6. Atitit sql计划任务与查询优化器--统计信息模块

    Atitit sql计划任务与查询优化器--统计信息模块 每一个统计信息的内容都包含以上三部分的内容. 我们依次来分析下,通过这三部分内容SQL Server如何了解该列数据的内容分布的. a.统计信 ...

  7. hibernate注解方法使用总结(转)

    原博文地址:http://blog.sina.com.cn/s/blog_935ebb670101dnre.html 1.类级别注解 @Entity     映射实体类 @Table    映射数据库 ...

  8. iOS-大神们的博客收集

    唐巧的技术博客 http://blog.devtang.comOneV's Den http://onevcat.com破船之家 http://beyondvincent.comNSHipster h ...

  9. iOS-常见问题

    11.21常见问题 一storyboard连线问题 产生原因:将与storyboard关联的属性删除了,但是storyboard中还保持之前所关联的属性. 解决: 点击view controller ...

  10. 获取Linux主机的CPU、内存、主板、BIOS的信息(Centos)

    #!/usr/bin/env python #coding:utf-8 import subprocess import re def Cmd_Exec(cmd): ''' 执行获取信息命令 :par ...