owin,webapi中将文件写入到response stream中
首先在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中的更多相关文章
- 将raw里面的数据库文件写入到data中
package com.city.list.db; import java.io.File; import java.io.FileNotFoundException; import java.io. ...
- PHP文件读写操作之文件写入代码
在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发 ...
- UBOOT把文件写入 NandFlash
如果把一个传到内存中的文件写入到 Nand Flash 中, 如:新的 uboot.bin, zImage(内核), rootfs 等, 如果做呢?我们可以用 Nand Flash 命令来完成. 但是 ...
- (转)基于OWIN WebAPI 使用OAuth授权服务【客户端模式(Client Credentials Grant)】
适应范围 采用Client Credentials方式,即应用公钥.密钥方式获取Access Token,适用于任何类型应用,但通过它所获取的Access Token只能用于访问与用户无关的Open ...
- 基于OWIN WebAPI 使用OAuth授权服务【客户端模式(Client Credentials Grant)】
适应范围 采用Client Credentials方式,即应用公钥.密钥方式获取Access Token,适用于任何类型应用,但通过它所获取的Access Token只能用于访问与用户无关的Open ...
- C# 下载文件 删除文件 写入文本
由于经常用到文件处理,便自己封装了下 分享给大家. 包含写入文本 批量删除文件 下载文件 .--可直接使用 /// <summary> /// 写入到txt /// </summ ...
- ASP 读写文件FSO,adodb.stream
例如静态化页面的时候 总结:用server.CreateObject("adodb.stream") 来读写比较好,可避免乱码和读取到多余的字符.....不推荐 "scr ...
- [转]WebApi 后端文件传输至远程服务器
/* 功能说明:微信退款需要有数字证书,而我们公司是做小程序平台的,会帮商家自动退款,所以会要求商家把微信证书上传至我们服务器,以便 微信退款. 使用HttpPostedFile 接受前端上传的文件, ...
- ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus
ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus 本文承接我的上一篇博文: ASP.NET 5 Linux部署,那篇文章主要是针对最新的ASP. ...
随机推荐
- [转]Scrapy入门教程
关键字:scrapy 入门教程 爬虫 Spider 作者:http://www.cnblogs.com/txw1958/ 出处:http://www.cnblogs.com/txw1958/archi ...
- 深入理解JavaScript系列:史上最清晰的JavaScript的原型讲解
一说起JavaScript就要谈的几个问题,原型就是其中的一个.说了句大话,史上最清晰.本来是想按照大纲式的行文写一下,但写到后边感觉其实就一个概念,没有什么条理性,所以下面就简单按照概念解释的模式谈 ...
- mac下安装和配置mysql5.7.9
我安装的是5.7.9版本的sql 一开始在网上看到的都是其他版本的安装,弄得自己卸载了好几次 mysql就只有一个dmg主文件,安装这一个就好了. 5.7以后安装的mysql不再使用旧版的默认密码:r ...
- JS小总结
今天看了一下js的部分总结了一下 函数的定义首先是命名函数function funcName函数还有匿名函数 var funcName = function()普通函数和匿名函数在调用上基本没有什么区 ...
- [.NET] CErrStack 方便地管理错误或异常
Option Explicit On Option Strict On Imports System.Reflection Imports System.Diagnostics Public Stru ...
- 3G数据请求
// 该类负责发送2G/3G Http请求的数据 #import <Foundation/Foundation.h> #import "ASIHTTPRequest.h&quo ...
- Redis的简介与安装(windows)
1.简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串). list(链表).set(集合).zset(sorte ...
- web开发实战--弹出式富文本编辑器的实现思路和踩过的坑
前言: 和弟弟合作, 一起整了个智慧屋的小web站点, 里面包含了很多经典的智力和推理题. 其实该站点从技术层面来分析的话, 也算一个信息发布站点. 因此在该网站的后台运营中, 富文本的编辑器显得尤为 ...
- <mate>
1.<meta http-equiv="X-UA-Compatible" content="IE=edge"> 以最高级别的可用模式显示内容 有些因 ...
- 优先队列 :Priority Queue
PriorityQueue是从JDK1.5开始提供的新的数据结构接口,它是一种基于优先级堆的极大优先级队列.优先级队列是不同于先进先出队列的另一种队列. 每次从队列中取出的是具有最高优先权的元素.如果 ...