MultipartFormDataMemoryStreamProvider修正以支持非IIS宿主的情况
来源:互联网 发布:海拔修正u50数据曲线 编辑:程序博客网 时间:2024/04/28 07:55
最近做上传,发现以前写的《WebAPI通过multipart/form-data方式接收文件时由开发自行决定如何保存文件》在owin下会取不到文件,所以这里重新修正了下,具体代码如下
using System.IO; using System.Net.Http; using System.Net.Http.Headers; public class MultipartFormDataMemoryStreamProvider : MultipartFormDataStreamProvider { public MultipartFormDataMemoryStreamProvider() : base("/") { } public override Stream GetStream(HttpContent parent, HttpContentHeaders headers) { if (parent == null) { throw new ArgumentNullException("parent"); } if (headers == null) { throw new ArgumentNullException("headers"); } MemoryStream stream = new MemoryStream(); if (IsFileContent(parent, headers)) { MultipartFileData item = new MultipartFileDataStream(headers, string.Empty, stream); this.FileData.Add(item); } return stream; } private bool IsFileContent(HttpContent parent, HttpContentHeaders headers) { ContentDispositionHeaderValue contentDisposition = headers.ContentDisposition; if (contentDisposition == null) { throw new InvalidOperationException("Content-Disposition error"); } return !string.IsNullOrEmpty(contentDisposition.FileName); } } public class MultipartFileDataStream : MultipartFileData, IDisposable { /// <summary> /// file content stream /// </summary> public Stream Stream { get; private set; } public MultipartFileDataStream(HttpContentHeaders headers, string localFileName, Stream stream) : base(headers, localFileName) { if (stream == null) { throw new ArgumentNullException("stream"); } this.Stream = stream; } public void Dispose() { this.Stream.Dispose(); } }使用方式基本没变化,只是取Stream的地方有所调整
if (!Request.Content.IsMimeMultipartContent()){ throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);}Dictionary<string, string> dic = new Dictionary<string, string>();#region 原来使用MultipartFormDataStreamProvider的方式//string root = HttpContext.Current.Server.MapPath("~/App_Data");//指定要将文件存入的服务器物理位置//var provider = new MultipartFormDataStreamProvider(root);#endregionstring root = AppDomain.CurrentDomain.BaseDirectory;var provider = new MultipartFormDataMemoryStreamProvider();try{ // Read the form data. await Request.Content.ReadAsMultipartAsync(provider); // This illustrates how to get the file names. foreach (MultipartFileData file in provider.FileData) {//接收文件 Trace.WriteLine(file.Headers.ContentDisposition.FileName);//获取上传文件实际的文件名 Trace.WriteLine("Server file path: " + file.LocalFileName);//获取上传文件在服务上默认的文件名 var stream = ((MultipartFileDataStream)file).Stream; using (StreamWriter sw = new StreamWriter(Path.Combine(root, file.Headers.ContentDisposition.FileName))) { stream.CopyTo(sw.BaseStream); sw.Flush(); } } foreach (var key in provider.FormData.AllKeys) {//接收FormData dic.Add(key, provider.FormData[key]); Console.WriteLine($"Key:{key} Value:{provider.FormData[key]}"); }}catch(Exception ex){ throw;}
0 0
- MultipartFormDataMemoryStreamProvider修正以支持非IIS宿主的情况
- 配置iis以支持Silverlight
- vs2005asp.net中以IIS为宿主开发设置
- 用IIS做宿主的WCF服务
- 图文详解配置IIS以支持Silverlight
- 【菜鸟学WCF】以IIS为宿主创建WCF服务及问题解决
- 利用IIS作为宿主 发布你的WCF Service
- 利用IIS作为宿主 发布你的WCF Service
- 宿主在Windows Service中的WCF(创建,安装,调用) (host到exe,非IIS)
- 宿主在Windows Service中的WCF(创建,安装,调用) (host到exe,非IIS)
- 以windows服务为宿主的WCF服务
- iis支持FSO的设置
- IIS支持PHP的方法
- VS2015 使用IIS Express 支持非localhost访问
- 改变Emacs下的注释代码方式以支持当前行(未选中情况下)的注释/反注释
- 转载 佐佐木的文章,以激励自己,修正自己
- NME的GLSL支持情况
- input placehode 的支持情况
- linux配置java环境变量(详细)
- 字典树
- 利用BP神经网络教计算机进行非线函数拟合
- beyesi
- 软件开发标准流程
- MultipartFormDataMemoryStreamProvider修正以支持非IIS宿主的情况
- 安装配置opensips过程记录
- opencv基本操作(二)
- ROS nodelet 使用详解
- 广东揭阳:胜过“地沟油”毒害人类“工业氧混充医用氧”
- MySql常用指令
- day04数据库总结
- Android Webview广告过滤的实现
- phonegap创建项目 混合编程