nft文件传输_Nancy之文件上传与下载
零、前言
由于前段时间一直在找工作,找到工作后又比较忙,又加班又通宵的赶项目,所以博客有段时间没有更新了。
今天稍微空闲一点,碰巧前几天看到有园友问我Nancy中下载文件的问题,然后就趁着休息的时间写下了这篇博客。
直接进正题吧!
一、新建一个空的asp.net应用程序
通过nuget安装相应的packages
二、添加Modules和Views文件夹
用于存放我们的“控制器”和视图(这一步不是必须的喔!)
三、新建CustomRootPathProvider.cs
具体如下:
1 public classCustomRootPathProvider : IRootPathProvider2 {3 public stringGetRootPath()4 {5 return AppDomain.CurrentDomain.GetData(".appPath").ToString();6 }7 }
四、编写Bootstrapper.cs
具体如下:
1 public classBootstrapper : DefaultNancyBootstrapper2 {3 protected overrideIRootPathProvider RootPathProvider4 {5 get
6 {7 return newCustomRootPathProvider();8 }9 }10 }
五、编写Module
这里我是新建了一个HomeModule.cs
需要注意的是,要在构造函数中添加一点东西
IRootPathProvider pathProvider
下面贴上HomeModule.cs的完整代码
1 usingNancy;2 usingSystem.Collections.Generic;3 usingSystem.IO;4
5 namespaceNancyUpLoadAndDownloadDemo.Modules6 {7 public classHomeModule : NancyModule8 {9 public HomeModule(IRootPathProvider pathProvider) : base("/")10 {11 var uploadDirectory = Path.Combine(pathProvider.GetRootPath(), "Content", "uploads");12
13 Get["/"] = _ =>
14 {15 return View["UpLoad"];16 };17
18 Post["/"] = _ =>
19 {20
21 if (!Directory.Exists(uploadDirectory))22 {23 Directory.CreateDirectory(uploadDirectory);24 }25
26 foreach (var file inRequest.Files)27 {28 var filename =Path.Combine(uploadDirectory, file.Name);29 using (FileStream fileStream = newFileStream(filename, FileMode.Create))30 {31 file.Value.CopyTo(fileStream);32 }33 }34 return Response.AsRedirect("/show") ;35 };36
37 Get["/down/{name}"] = _ =>
38 {39 string fileName =_.name;40 var relatePath = @"Content\uploads\"+fileName;41 returnResponse.AsFile(relatePath);42 };43
44 Get["/show"] = _ =>
45 {46 var folder = newDirectoryInfo(uploadDirectory);47 IList files = new List();48 foreach (var file infolder.GetFiles())49 {50 files.Add(file.Name);51 }52 return View["Show", files];53 };54 }55 }56 }
下面简单说一下这些是用来干嘛的:
Get["/"] 显示upload这个页面
Post["/"] 上传文件的
Get["/down/{name}"] 下载文件,{name}是参数 文件名
Get["/show"] 显示可下载的文件
上传文件和下载文件的具体细节会在看完演示后细说。
六、建立视图
Show.cshtml
1 @{2 Layout = null;3 }4
5
6
7
8
9
10
11
12
13
14 @foreach (var item in Model)15 {16
17
18 @item19
20
21 }22
23
24
25
UpLoad.cshtml
1 @{2 Layout = null;3 }4
5
6
7
8
9
10
UpLoad
11
12
13
这是上传文件的演示
14
15
16
17
18 请选择要上传的文件
19
20
21
22
23
24
25
26
27
视图就比较简单,没什么样式。就是简单的列出文件名称和上传文件的表单
下面来看看效果:
就这样完成了简单的上传和下载功能,也是挺简单的。
七、上传与下载的细节
上传:
相信之前大家在asp.net中进行上传时,下面这个httppostedfilebase类,肯定是经常用的
但是这个是基于system.web的,而Nancy是不依赖于system.web的!!!那么Nancy是怎么处理这个的呢
Nancy有自己的一套东西来处理这个,可以看看这个类
也可以看看httppostfilebase这个类
像处理这些问题,Nancy都有自己的实现,用起来跟平常的用法有点区别,这个是需要注意的!!
还有一个要注意的是路径的问题,这个问题可以参见
下载:
在asp.net mvc中,下载我们用的比较多的是 fileresult
其实,Nancy也提供了类似的方法
用法就是 response.asfile()
可以参见下面的
nft文件传输_Nancy之文件上传与下载相关推荐
- 大文件传输解决方案:分片上传 / 下载限速
前言 不少项目中会遇到上传下载视频.更新包.应用程序等文件,此类文件的共同点就是十分巨大,我在项目中遇到过 4G 左右的文件同时 100 多台机器下载,此时如果用 post 上传和下载想一下都不可能, ...
- [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
转自:http://blog.csdn.net/soarheaven/archive/2008/12/08/3474152.aspx 最近项目需要对FTP服务器进行操作,现把实现总结如下: 打算分2篇 ...
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1...
相关文章导航 Sql Server2005 Transact-SQL 新兵器学习总结之-总结 Flex,Fms3相关文章索引 FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统 ...
- xshell上传本地文件命令_linux学习 XShell上传、下载本地文件到linux服务器
(一)通过命令行的方式 1.linux服务器端设置 在linux主机上,安装上传下载工具包rz及sz; 如果不知道你要安装包的具体名称,可以使用yum provides */name 进行查找系统自带 ...
- EasyExcel实现文件读取、导出、上传、下载操作
一.EasyExcel简介 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度 ...
- python第三方库文件传输_python3 post方式上传文件。
import requests url = 'http://www.test.com/doFile.php' #url = 'http://www.test.com/doPost.php' #file ...
- java ssh 服务器文件传输_java使用SFTP上传文件到资源服务器
本文实例为大家分享了java实现SFTP上传文件到资源服务器工具类,供大家参考,具体内容如下 首先得创建连接sftp服务器的公共类MySftp.java: package cn.test.util; ...
- java的sftp文件传输_java使用SFTP上传文件到资源服务器方法详解
java使用SFTP上传文件到资源服务器 本文实例为大家分享了java实现SFTP上传文件到资源服务器工具类,供大家参考,具体内容如下 首先得创建连接sftp服务器的公共类MySftp.java: p ...
- java csv文件tozip后损坏_java上传并下载以及解压zip文件有时会报文件被损坏错误分析以及解决...
情景描述: 1.将本地数据备份成zip文件: 2.将备份的zip文件通过sftp上传到文件服务器: 3.将文件服务器上的zip文件下载到运行服务器: 4.将下载的zip文件解压到本地(文件大小超过50 ...
最新文章
- Frog Traveler 最短路,bfs剪枝,打印路径
- 一个全栈式的应用集成平台,打破“信息孤岛”
- sql语句优化总结 mysql_MySQL-SQL优化总结
- 深入理解javascript原型链
- PHP 服务器变量 $_SERVER(转)
- V-Play入门手册3-如何编写高效的代码?
- imreadraw的注册
- openai-gpt_GPT-3是“人类”吗?
- android 模拟器 超时,Appcelerator Studio超时等待Android模拟器启动
- apple pencil二代值不值得买?iPad电容笔测评
- 数据结构 严薇敏 单链表(无头结点)的实现(增 删 改 查)及其使用方法详解
- 【资源】公开的电子书 合集 (计算机相关、多高清、pdf)
- Ubuntu 22.4网易云音乐启动失败处理方法
- linux 卸载nexus,Linux下安装maven和nexus
- 权限和归属——基本权限和特殊权限
- 最简单的分压和低频滤波电路
- 程序员的自我修养------勘误表
- 以26个英文字母开头的动物名字
- BQ25504芯片解析
- 海信变频空调室外机工作异常分析与检修案例