首页 > 解决方案 > C# Twilio 检索合成媒体

问题描述

我正在尝试使用以下代码将合成媒体文件下载到我的硬盘驱动器中:

try
{
    var uri = "https://video.twilio.com/v1/Compositions/" + sid + "/Media?Ttl=6000";

    var request = (HttpWebRequest)WebRequest.Create(uri);
    request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(_apiKeySid + ":" + _apiKeySecret)));
    request.AllowAutoRedirect = false;
    var responseBody = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();
    var mediaLocation = JsonConvert.DeserializeObject<Dictionary<string, string>>(responseBody)["redirect_to"];

    new WebClient().DownloadFile(mediaLocation, "D:\\test.mp4");
}
catch (Exception ex)
{
    var temp = ex.Message;
}

但是每次我收到此消息的异常时:“远程服务器返回错误:(302) FOUND。”

请注意,此方法是在 Twilio 调用我StatusCallback在使用方法创建新组合时设置的方法之后调用的CompositionResource.CreateAsync

标签: c#.netasp.net-mvctwiliotwilio-api

解决方案


所以,问题是请求被重定向到一个新位置,所以我所要做的就是允许重定向请求,然后通过将流对象复制到文件来下载文件,如下所示:

        var uri = "https://video.twilio.com/v1/Compositions/" + sid + "/Media?Ttl=6000";

        var request = (HttpWebRequest)WebRequest.Create(uri);
        request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(_apiKeySid + ":" + _apiKeySecret)));
        request.AllowAutoRedirect = true;
        var responseBody = (await request.GetResponseAsync()).GetResponseStream();

        using (var fs = File.Create(@"D:\test.mp4"))
        {
            responseBody.CopyTo(fs);
        }

推荐阅读