猿问

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方法创建新组合时设置的方法之后调用的。


德玛西亚99
浏览 197回答 2
2回答

蓝山帝景

所以,问题是请求被重定向到一个新位置,所以我所要做的就是允许请求重定向,然后通过将流对象复制到文件来下载文件,如下所示:&nbsp; &nbsp; &nbsp; &nbsp; var uri = "https://video.twilio.com/v1/Compositions/" + sid + "/Media?Ttl=6000";&nbsp; &nbsp; &nbsp; &nbsp; var request = (HttpWebRequest)WebRequest.Create(uri);&nbsp; &nbsp; &nbsp; &nbsp; request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(_apiKeySid + ":" + _apiKeySecret)));&nbsp; &nbsp; &nbsp; &nbsp; request.AllowAutoRedirect = true;&nbsp; &nbsp; &nbsp; &nbsp; var responseBody = (await request.GetResponseAsync()).GetResponseStream();&nbsp; &nbsp; &nbsp; &nbsp; using (var fs = File.Create(@"D:\test.mp4"))&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; responseBody.CopyTo(fs);&nbsp; &nbsp; &nbsp; &nbsp; }

暮色呼如

302 Found 表示您要查找的资源已移动到不同的 URL。检查响应的Location Header以查看新 URL 是什么。302 发现超文本传输协议 (HTTP) 302 Found 重定向状态响应代码表示请求的资源已临时移动到 Location 标头给出的 URL。浏览器重定向到此页面,但搜索引擎不会更新其指向资源的链接(在“SEO-speak”中,据说“link-juice”不会发送到新 URL)。
随时随地看视频慕课网APP
我要回答