我正在尝试通过rest api将视频上传到azure媒体服务器。我已经达到了上传视频的步骤,但是我收到了错误消息。我使用以下代码上传视频。
var client = new HttpClient();
client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Bearer " + token);
client.DefaultRequestHeaders.Add("x-ms-version", "2.8");
client.DefaultRequestHeaders.Add("x-ms-date", "2015-02-5");
client.DefaultRequestHeaders.Add("DataServiceVersion", "3.0");
client.DefaultRequestHeaders.Add("MaxDataServiceVersion", "3.0");
client.DefaultRequestHeaders.Add("x-ms-blob-type", "BlockBlob");
var formcontent = new MultipartFormDataContent();
FileStream stream = File.OpenRead(@"C:\AzureMediaUploadTest\MediaUploadTest\VideoFiles\tom.mp4");
byte[] fileBytes = new byte[stream.Length];
stream.Read(fileBytes, 0, fileBytes.Length);
stream.Close();
var streamcontent = new StreamContent(new MemoryStream(fileBytes));
formcontent.Add(streamcontent);
formcontent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result = await client.PutAsync(uploadurl, formcontent);
然而,结果给出了400-A http标头的格式不正确。我不确定哪个标题也被提及或者我错过了什么。
感谢任何帮助。
更新:我已将问题标记为已回答,但我现在遇到了身份验证标题问题 - 此处询问了新问题 - Uploading blob to azure - Create authentication header
答案 0 :(得分:0)
所有经过身份验证的请求都必须包含协调世界时 (UTC)请求的时间戳。您也可以指定时间戳 在x-ms-date标头中,或在标准HTTP / HTTPS Date标头中。如果 两个标头都在请求中指定,x-ms-date的值为 用作请求的创建时间。存储服务确保 到达时,请求的时间不超过15分钟 服务。这可以防范某些安全攻击,包括 重播攻击。当此检查失败时,服务器返回响应 代码403(禁止)。
您的2015-02-05
距离有效的UTC日期格式。
根据this documentation here和示例PUT请求,Date标头表示为x-ms-date: Wed, 23 Oct 2013 22:41:55 GMT
Azure Blob REST API文档中没有单一的日期称为yyyy-mm-dd
格式。