Asp.net web api 在.net core中发布单个大文件
我有一个.net core 2.1 api应用程序,它将根据文件名从远程位置下载文件。代码如下:Asp.net web api 在.net core中发布单个大文件,asp.net-web-api,.net-core,Asp.net Web Api,.net Core,我有一个.net core 2.1 api应用程序,它将根据文件名从远程位置下载文件。代码如下: static public class FileDownloadAsync { static public async Task DownloadFile(string filename) { //File name is 1GB.zip for testing Stopwatch stopwatch = new Stopwatch();
static public class FileDownloadAsync
{
static public async Task DownloadFile(string filename)
{
//File name is 1GB.zip for testing
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
using (HttpClient client = new HttpClient())
{
string url = @"http://speedtest.tele2.net/" + filename;
using (HttpResponseMessage response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead))
using (Stream readFrom = await response.Content.ReadAsStreamAsync())
{
string tempFile = $"D:\\Test\\{filename}";
using (Stream writeTo = File.Open(tempFile, FileMode.Create))
{
await readFrom.CopyToAsync(writeTo);
}
}
stopwatch.Stop();
Debug.Print(stopwatch.Elapsed.ToString());
}
}
}
这是伟大的工作,它将拉一个1G的文件下来约50秒。在要求的下载时间内。我已经硬编码了一个测试文件,要在代码中下载,用于测试和存储位置——这些值最终将在迁移到生产环境中时来自配置文件。以下是调用此函数的API端点:
[HttpGet("{fileName}")]
public async Task<string> GetFile(string fileName)
{
await FileDownloadAsync.DownloadFile(fileName);
return "Done";
}
[HttpGet(“{fileName}”)]
公共异步任务GetFile(字符串文件名)
{
等待FileDownloadAsync.DownloadFile(文件名);
返回“完成”;
}
因此,将文件从远程位置下载到本地服务器不是问题。我需要一些关于将此文件重新发布到其他API的帮助/指导。一旦下载了文件,就需要对文件进行一些工作来准备上载(这些文件都是MP4文件),一旦完成了这些工作,我需要将其发布到另一个API以进行更专有的处理。以下是我拥有的API端点数据:
POST:/batch/requests分配资源以开始新的批转录。使用此方法请求输入上的[工作]
音频数据。在接受请求后,响应将提供
有关关联请求ID和处理状态的信息
头:授权:授权令牌
接受:application/json
内容类型:表示音频格式。该值必须为:
音频/x-wav;编解码器=pcm;位=16;费率=8000;通道=1
音频/x-wav;编解码器=pcm;位=16;比率=16000;通道=1
音频/x-raw;编解码器=pcm;位=16;费率=8000;通道=1
音频/x-raw;编解码器=pcm;位=16;比率=16000;通道=1
视频/mp4
内容长度(可选):输入语音文件的大小不是
如果使用分块传输,则需要。
查询字符串参数(必需):
profileId:受支持的(请参阅获取配置文件)之一customerId:的id
顾客。最小值为1,最大值为250个字母数字点的字符串
(.)和破折号(-)字符
因此,我将内容类型设置为video/MP4进行处理。请注意,如果使用分块传输,则不使用输入大小
现在,我更关心的是以非分组格式发布(流)文件,同时等待更多关于他们认为“块”文件的信息。
因此,我正在寻求有关将文件从磁盘传输到端点的帮助。我在.net core API中遇到的每一件事都是创建API,以便从文章中下载文件,比如剃刀页面或角度页面——我已经有了。我只是需要一些关于“重新发布”到另一个API的帮助谢谢使用
HttpClient
打开文件流,创建内容流,设置必要的标题并发布到端点
Stream file = File.Open(filepath, FileMode.Open);
var content = new StreamContent(file);
content.Headers.ContentType = new MediaTypeHeaderValue("video/MP4");
client.DefaultRequestHeaders.Add("Authorization", "token here");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json");
using (HttpResponseMessage response = await client.PostAsync(url, content)) {
//...
}
使用
HttpClient
可以打开文件流,创建内容流,设置必要的标题并发布到端点
Stream file = File.Open(filepath, FileMode.Open);
var content = new StreamContent(file);
content.Headers.ContentType = new MediaTypeHeaderValue("video/MP4");
client.DefaultRequestHeaders.Add("Authorization", "token here");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json");
using (HttpResponseMessage response = await client.PostAsync(url, content)) {
//...
}