首先在controller项目中添加一个类:

 using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Net;
 using System.Net.Http;
 using System.Text;
 using System.Threading.Tasks;

 namespace Test
 {
     public interface IWriteStreamToResponse<T>
     {
         T Suorce { get; set; }
         void WriteToStream(Stream outputStream, HttpContent content, TransportContext context);
     }

     public class StreamFromFileName : IWriteStreamToResponse<string>
     {
         private string _suorce;

         public string Suorce
         {
             get
             {
                 return _suorce;
             }
             set
             {
                 _suorce = value;
             }
         }
         public async void WriteToStream(Stream outputStream, HttpContent content, TransportContext context)
         {
             try
             {
                 ];
                 using (var video = File.Open(_suorce, FileMode.Open, FileAccess.Read))
                 {
                     var length = (int)video.Length;
                     ;

                      && bytesRead > )
                     {
                         bytesRead = video.Read(buffer, , Math.Min(length, buffer.Length));
                         , bytesRead);
                         length -= bytesRead;
                     }
                 }
             }
             catch (Exception ex)
             {
                 return;
             }
             finally
             {
                 outputStream.Close();
             }
         }
     }

     public class StreamFromBytes : IWriteStreamToResponse<byte[]>
     {
         private byte[] _source;

         public byte[] Suorce
         {
             get
             {
                 return _source;
             }
             set
             {
                 _source = value;
             }
         }

         public async void WriteToStream(Stream outputStream, HttpContent content, TransportContext context)
         {
             try
             {
                 , _source.Length);
             }
             catch (Exception ex)
             {
                 return;
             }
             finally
             {
                 outputStream.Close();
             }
         }
     }
 }

controller中的action调用

  public HttpResponseMessage GetVideo(string file)
         {
             try
             {
                 var bytes = IC.GetClipFileBytes(file.Replace(".mp4", ""));
                 if (bytes == Encoding.UTF8.GetBytes(EntityEnums.StatusCode.NoFound.ToString()))
                     throw new HttpResponseException(HttpStatusCode.NotFound);
                 IWriteStreamToResponse<byte[]> video = new StreamFromBytes() { Suorce = bytes };
                 Action<Stream, HttpContent, TransportContext> send = video.WriteToStream;
                 var response = Request.CreateResponse();
                 response.Content = new System.Net.Http.PushStreamContent(send, new MediaTypeHeaderValue("video/mp4"));
                 //调用异步数据推送接口
                 return response;

             }
             catch (Exception)
             {
                 throw;
             }
         }

action中接收客户端upload的文件

  string tempFile = Environment.GetEnvironmentVariable("TEMP");
                MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(tempFile);
                var result = Request.Content.ReadAsMultipartAsync(provider).Result;
                string[] arrFiles = new string[provider.FileData.Count];
                ;
                //Request.Content.ReadAsMultipartAsync().Wait();
                // 获取文件名称
                foreach (MultipartFileData fileData in provider.FileData)
                {
                }            

owin,webapi中将文件写入到response stream中的更多相关文章

  1. 将raw里面的数据库文件写入到data中

    package com.city.list.db; import java.io.File; import java.io.FileNotFoundException; import java.io. ...

  2. PHP文件读写操作之文件写入代码

    在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发 ...

  3. UBOOT把文件写入 NandFlash

    如果把一个传到内存中的文件写入到 Nand Flash 中, 如:新的 uboot.bin, zImage(内核), rootfs 等, 如果做呢?我们可以用 Nand Flash 命令来完成. 但是 ...

  4. (转)基于OWIN WebAPI 使用OAuth授权服务【客户端模式(Client Credentials Grant)】

    适应范围 采用Client Credentials方式,即应用公钥.密钥方式获取Access Token,适用于任何类型应用,但通过它所获取的Access Token只能用于访问与用户无关的Open ...

  5. 基于OWIN WebAPI 使用OAuth授权服务【客户端模式(Client Credentials Grant)】

    适应范围 采用Client Credentials方式,即应用公钥.密钥方式获取Access Token,适用于任何类型应用,但通过它所获取的Access Token只能用于访问与用户无关的Open ...

  6. C# 下载文件 删除文件 写入文本

    由于经常用到文件处理,便自己封装了下 分享给大家. 包含写入文本  批量删除文件  下载文件 .--可直接使用 /// <summary> /// 写入到txt /// </summ ...

  7. ASP 读写文件FSO,adodb.stream

    例如静态化页面的时候 总结:用server.CreateObject("adodb.stream") 来读写比较好,可避免乱码和读取到多余的字符.....不推荐 "scr ...

  8. [转]WebApi 后端文件传输至远程服务器

    /* 功能说明:微信退款需要有数字证书,而我们公司是做小程序平台的,会帮商家自动退款,所以会要求商家把微信证书上传至我们服务器,以便 微信退款. 使用HttpPostedFile 接受前端上传的文件, ...

  9. ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus

    ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus 本文承接我的上一篇博文: ASP.NET 5 Linux部署,那篇文章主要是针对最新的ASP. ...

随机推荐

  1. 克隆虚拟机重启服务时 Error:No suitable device found: no device found for connection "System eth0"

    故障说明: 在克隆几台虚拟机,发现启动后不能配置IP地址等信息,使用linux命令: “ifup eth0”也不能激活网卡, 而在使用"service network restart&quo ...

  2. css 绘制对话框三角符号

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. BZOJ 3176 Sort

    先一遍reverse+逆序对个数. 要开long long啊. #include<iostream> #include<cstdio> #include<cstring& ...

  4. 安装mongodb 远程服务器报错

    安装的时候百度了各种教程 就是装不上 结果原因看下图吧  后面这神秘代码是什么鬼 加上后就能正常下载了

  5. Unicode字符集下CString与char *转换 (解决中文乱码等)(转)

    UniCode 下 CString 转 char* 的方法的文章有很多,但是大部分都是在互相转载,看了那么多资料,仍然没有解决乱码的问题,后来从一个论坛的一条回复里面找到了正确的方法,特此拿出来与大家 ...

  6. savedInstanceState的作用

    在activity的生命周期中,只要离开了可见阶段,或者说失去了焦点,activity就很可能被进程终止了!,被KILL掉了,,这时候,就需要有种机制,能保存当时的状态,这就是savedInstanc ...

  7. iOS的UIDevice,NSBundle,NSLocale

    iOS的APP的应用开发的过程中,有时为了bug跟踪或者获取用反馈的需要自动收集用 户设备.系统信息.应用信息等等,这些信息方便开发者诊断问题,当然这些信息是用户的非隐私信息,是通过开发api可以获取 ...

  8. IL命令

    部分CIL 操作码 操作码                                           作用 add, sub, mul, div, rem                   ...

  9. oracle 多条语句同时执行(比如返回两个dataset)

    public DataSet GetQualityStatistics(DateTime start_date,DateTime end_date,string modality,string hos ...

  10. UICollectionViewCell选中高亮状态和UIButton的高亮状态和选中状态

    UICollectionViewCell选中高亮状态 //设置点击高亮和非高亮效果! - (BOOL)collectionView:(UICollectionView *)collectionView ...