Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api 在.net core中发布单个大文件_Asp.net Web Api_.net Core - Fatal编程技术网

Asp.net web api 在.net core中发布单个大文件

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();

我有一个.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();
        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)) {
    //...
}