将blob上传到azure - http标头格式不正确

时间:2015-02-05 14:24:34

标签: rest azure

我正在尝试通过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

1 个答案:

答案 0 :(得分:0)

根据this documentation here

  

所有经过身份验证的请求都必须包含协调世界时   (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格式。