首先在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. Java源码分析系列

    1) 深入Java集合学习系列:HashMap的实现原理 2) 深入Java集合学习系列:LinkedHashMap的实现原理 3) 深入Java集合学习系列:HashSet的实现原理 4) 深入Ja ...

  2. arch安装

    [archwiki-install]: (https://wiki.archlinux.org/index.php/Installation_guide) uefi+gpt Gummiboot #se ...

  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. UE4 通过HTTP 接受JPG并动态 构建 UTexture2D 简单例子

    s void UChildBaseUserWidget::setTextureFromLoadImg(FHttpRequestPtr _request, FHttpResponsePtr _respo ...

  6. c语言中gets ,getschar 和fgets 的用法及三者之间的差别,还有scanf

    ①gets [1]函数:gets(字符指针) [2]头文件:stdio.h(c中),c++不需包含此头文件 [3]原型:char*gets(char*buffer); [4]功能:从stdin流中读取 ...

  7. EventBus的使用

    # EventBus用于android线程间的通信,方便将子线程的数据发送的UI线程,对UI界面更新:总体来说对于这个过程可以分为3个步骤: 1.创建event,用于传递信息: 比如你需要传List集 ...

  8. SqlServer性能优化 自定义动化性能收集(四)

    配置数据收集器: 1.创建登录名并映射角色 2.配置管理数据仓库 3.创建收集组.收集项----MSDB数据存储   sp_syscollector_create... 4.自动配置相关job 具体步 ...

  9. 如何书写高质量的jQuery代码

    想必大家对于jQuery这个最流行的javascript类库都不陌生,而且只要是前端开发人员肯定或多或少的使用或者接触过,在今天的这篇文章中,参考了一些资料及实际使用效率,将介绍一些书写高质量jQue ...

  10. 分布式blog系统 TFS总结

    解决的问题 文件总量太大  一台服务器无法存放 只能放在网络集群中分节点存放   也就是通过屏蔽网络部分 形成一个“ one big CPU” 和 “one big disk” .Client只需要向 ...