首先在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. 一、Android屏幕的计量单位

    px  :是屏幕的像素点in   :英寸mm:毫米pt   :磅,1/72英寸dp  :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1pxdip :等同于dpsp  :同dp ...

  2. iOS8后core location框架启动定位服务的步骤

    1.在使用CoreLocation前需要调用如下函数[iOS 8专用]: iOS 8对定位进行了一些修改,其中包括定位授权的方法,CLLocationManager增加了下面的两个方法: (1)始终允 ...

  3. Tomcat8 localhost+端口可以访问Manager APP,而IP+端口不可以访问 解决办法

    localhost + 端口可以正常访问Manager APP,而IP + 端口不能访问Manager APP,报403错误.(我的主机环境是Ubuntu16.04) 前提是你已经配好了tomcat_ ...

  4. Spring的依赖注入怎么理解

    先看一段代码假设你编写了两个类,一个是人(Person),一个是手机(Mobile). 人有时候需要用手机打电话,需要用到手机的dialUp方法. 传统的写法是这样: Java code public ...

  5. vue学习笔记

    来公司以后就一直在用vue框架,不管是业务代码,还是做vue组件.关于vue有一些点是文档中没有提及的,记录一下以便以后查询- 一.Vue的特点 新一代 Vue.js 框架非常关注如何用极少的外部特性 ...

  6. Error: unable to connect to node rabbit@mail: nodedown

    某天,开启一个应用时,发现连接rabbitmq失败,本来想用rabbitmqctl来查看队列,结果提示“Error: unable to connect to node rabbit@mail: no ...

  7. span标签跳转新页面

      <span onclick="javascript:window.open('http://eccu.fr/guanli/login.aspx')" style=&quo ...

  8. 字符串反转C#的实现

    字符串反转是面试过程中出现频率较高的算法题,今天一个牛同事让我用C#帮他实现这个算法,前提当然是不能使用类库. 例如: how are you 的反转结果为 you are how. 算法1: 是我当 ...

  9. Collections.reverse 代码思考-超越昨天的自己系列(13)

    点进Collections.reverse的代码瞄了眼,然后就开始了一些基础知识的收集. 现在发现知道的越多,知道不知道的越多. 列几个记录下: reverse方法源码: /** * Reverses ...

  10. 我的第一份供lua调用的c模块

    #include <stdio.h> #include <string> #include <direct.h> #include <windows.h> ...