C# Twilio 检索组合媒体
C# Twilio retrieve composition media
我正在尝试使用以下代码将合成媒体文件下载到我的硬盘中:
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;
}
但每次我收到一条异常消息:"The remote server returned an error: (302) FOUND."
请注意,此方法是在 Twilio 调用我的 StatusCallback
方法之后调用的,该方法是我在使用 CompositionResource.CreateAsync
方法创建新合成时设置的。
302 Found 表示您正在查找的资源已被移动到不同的URL。检查响应的 Location Header 以查看新的 URL.
The HyperText Transfer Protocol (HTTP) 302 Found redirect status
response code indicates that the resource requested has been
temporarily moved to the URL given by the Location header. A browser
redirects to this page but search engines don't update their links to
the resource (in 'SEO-speak', it is said that the 'link-juice' is not
sent to the new URL).
所以,问题是请求被重定向到一个新位置,所以我所要做的就是允许请求重定向,然后通过将流对象复制到文件来下载文件,就像这样:
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);
}
我正在尝试使用以下代码将合成媒体文件下载到我的硬盘中:
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;
}
但每次我收到一条异常消息:"The remote server returned an error: (302) FOUND."
请注意,此方法是在 Twilio 调用我的 StatusCallback
方法之后调用的,该方法是我在使用 CompositionResource.CreateAsync
方法创建新合成时设置的。
302 Found 表示您正在查找的资源已被移动到不同的URL。检查响应的 Location Header 以查看新的 URL.
The HyperText Transfer Protocol (HTTP) 302 Found redirect status response code indicates that the resource requested has been temporarily moved to the URL given by the Location header. A browser redirects to this page but search engines don't update their links to the resource (in 'SEO-speak', it is said that the 'link-juice' is not sent to the new URL).
所以,问题是请求被重定向到一个新位置,所以我所要做的就是允许请求重定向,然后通过将流对象复制到文件来下载文件,就像这样:
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);
}