c# - 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
。
解决方案
所以,问题是请求被重定向到一个新位置,所以我所要做的就是允许重定向请求,然后通过将流对象复制到文件来下载文件,如下所示:
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);
}
推荐阅读
- reactjs - 过滤状态数据不能正常工作 - React (CRA)
- javascript - 使用 webpack 时防止加载每个 .js 文件
- elasticsearch - 如何在不重新索引的情况下对 Elasticsearch 中的关键字字段进行不区分大小写的搜索?
- php - 使用 imageUrl 不显示图像,一切似乎都正确.PHP
- video - 通过 API 上传的 Google 相册会在处理后自动删除某些视频
- python - Pylint-Django:AttributeError:“下标”对象没有属性“名称”
- python - Python 中的因果影响分析(A/B 测试)
- machine-learning - Keras 文本分类器错误:层序贯_1 的输入 0 与层不兼容
- python - alembic - 如何跨版本共享功能?
- python - Beautiful Soup 仅在逐行手动执行代码时才有效