首先在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. Linux Shell shortcut

    Ctrl+a跳到第一个字符前Ctrl+x同上但再按一次会从新回到原位置 Details see below: Linux shell shortcut

  2. 用户新加入Group

    Linux中一个user可以加入多个分组 以下以用户holmes为例,原始用户组为holmes,新加入用户组users 首先进入root模式 [holmes@KirCentOS share]$ su ...

  3. ASP.NET输出JSON格式数据

    找到一个方法,虽然返回的不是json,但是数据格式是可以的 ArrayList eventList = new ArrayList(); ; i < ;i++ ) { Hashtable ht ...

  4. Velocity快速入门教程-脚本语法详解(转)

    1.变量 (1)变量的定义: #set($name = "hello")      说明:velocity中变量是弱类型的. 当使用#set 指令时,括在双引号中的字面字符串将解析 ...

  5. Record:Handle onClick for our custom LinearLayout for Gallery-like HorizontalScrollView

    Handle onClick for our custom LinearLayout for Gallery-like HorizontalScrollView   The post "Im ...

  6. 第三章Git使用入门--读书笔记

    “管理”一词,几乎在生活的方方面面都存在,而在Linux驱动开发中会涉及很多的源代码,对于数量繁多的源码,我们也应该有一个管理软件.Android和Linux内核及驱动开发的源代码基本都是由Git 来 ...

  7. Source Insight 常用设置和快捷键大全

    Source Insight 常用设置和快捷键大全 退出程序 : Alt+F4 重画屏幕 : Ctrl+Alt+Space 完成语法 : Ctrl+E 复制一行 : Ctrl+K 恰好复制该位置右边的 ...

  8. linux学习笔记1-ubuntu的安装与基本设置

    ubuntu的安装 (1) 要装ubuntu首先当然得捣鼓一台机器,当然你用虚拟机也是可以的.本人的这台DELL品牌机是从某师兄脚底下挖出来的,大概很多年没人用了,内存1.25G|||- -,但是硬盘 ...

  9. Localization要从第一天开始计划

    最近E3,微软说可以在任何region玩任何语言的游戏了.换一个语言么,听起来没有那么复杂,其实操作起来还得是从软件工程初期就好好计划. Windows在很长一段时间,你安装完了,就不能换语言了.大学 ...

  10. (整理) JQuery中的AJAX

    $(document).ready(function () { $("#search").click(function () { $.ajax({ type:"GET&q ...