首先在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. 解决 emulator-5554 disconnected! Cancelling

    在命令行状态下: adb kill-server ---再adb start-server:

  2. Exception mybatis 配置文件:<typeAlias alias="***" type="***"/> 重复配置

    INFO - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory ...

  3. 使用Java代码实现对宽带的连接

    对于多个类似的用户名相同的密码,运行java代码实现对宽带的自动连接 这是源代码: import java.io.BufferedReader; import java.io.IOException; ...

  4. 上传文件swfUploadConfig.js

    /*/* * Unobstrusive swf upload widget using jQuery. *example : $(':file.uo_widget_form_input_file_sw ...

  5. 关于IE9-解决background-size的问题

    body{background:url("/branch/comm/images-new/login.jpg") no-repeat;background-size:100%;fi ...

  6. Android应用开发SharedPreferences存储数据的使用方法

    Android应用开发SharedPreferences存储数据的使用方法 SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的 ...

  7. Excel顺序生成序号,不能有数字4出现

    A1填写:1 A2填写:=--SUBSTITUTE(A1+1,4,5) 然后下拉A3之后的单元格 需求应用场合:生成员工序号忌讳出现4的.

  8. iOS--时间类date详解

    NSDate定义时间的类 NSDate是一个时间类,在编写程序时,我们很少遇到.今天我突然碰到,感觉很生疏. 给大家发个博客,让大家也都温习一下,哈哈! 兄弟用的时候突然发现竟然有一些bug,大家用时 ...

  9. Eclipse的FindBugs插件

      Eclipse的FindBugs插件     问题提出: 当我们编写完代码,做完单元测试等各种测试后就提交正式运行,只能由运行的系统来检测我们代码是否有问题了,代码中隐藏的错误在系统运行的过程中被 ...

  10. devexpress xaf 开发中遇到的问题.

    devexpress xaf 开发中遇到的问题很多久了就忘记了.每天都把开发内容记录下来,方便大家,方便自己