将大量文件上传到blob存储时发生“请求日期标题太旧”错误

时间:2017-10-19 08:29:57

标签: php azure azure-storage-blobs

我的服务器上有大量的图像文件(大约900,000),我正在使用Azure的Azure客户端库进行循环并将我的文件上传到Azure Blob存储。我的上传脚本运行了大约2天,然后突然停止并输出错误。

  

Oct 19 01:28:14 ik1-315-17878 php:PHP致命错误:未捕获   异常'MicrosoftAzure \ Storage \ Common \ Exceptions \ ServiceException'   消息'失败:#012Code:403#012Value:服务器失败   验证请求。确保Authorization标头的值   正确形成包括签名。#012details(如果有的话):   AuthenticationFailed服务器   无法验证请求。确保价值   正确形成授权标头,包括   。签名#012RequestId:e7f247d6-001e-0022-142e-48abcc000000#012Time:2017-10-18T16:28:14.4980791ZRequest   日期标题太旧:'星期三,2017年10月18日16:12:27   格林威治标准时间'。'在   /home/t-matsumoto/GAZOU/vendor/microsoft/azure-storage/src/Common/Internal/ServiceRestProxy.php:486#012Stack   跟踪:#012#0   /home/t-matsumoto/GAZOU/vendor/microsoft/azure-storage/src/Common/Internal/ServiceRestProxy.php(404):   MicrosoftAzure \存储\ COMMON \内部\ ServiceRestProxy :: throwIfError(对象(GuzzleHttp \ PSR7 \ Respon   在   /home/t-matsumoto/GAZOU/vendor/microsoft/azure-storage/src/Common/Internal/ServiceRestProxy.php   在第486行

我搜索了原因,这可能是因为我的脚本发出该请求的时间戳与Azure收到请求时的时间戳相比太旧了。根据上面的错误信息,提出请求的时间是“2017年10月18日星期三16:12:27 GMT”,接收请求的时间是“2017-10-18T16:28:14.4980791Z”(迟到约15分钟) 。但我仍然不明白的是,为什么我的脚本运行了一段时间没有错误,然后突然发生了错误。任何人都可以向我解释使我的脚本稳定运行而没有错误的现象和解决方案。

我的php脚本如下所示

    require_once 'vendor/autoload.php';

    use MicrosoftAzure\Storage\Common\ServicesBuilder;
    use MicrosoftAzure\Storage\Common\ServiceException;

    $connectionString = "DefaultEndpointsProtocol=http;AccountName=<accountNameHere>;AccountKey=<accountKeyHere>";

    // Create blob REST proxy.
    $blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString);

foreach ($myListFiles as $filename) {
    $content = fopen($filename, "r");
    $blob_name = "myblob";

    //Upload blob
    $blobRestProxy->createBlockBlob("mycontainer", $blob_name, $content);
}

我从此链接上传了示例脚本 https://docs.microsoft.com/en-us/azure/storage/blobs/storage-php-how-to-use-blobs

1 个答案:

答案 0 :(得分:0)

我认为@Gaurav Mantri已经回答了你的问题:

Azure storage error using Python SDK

但是,由于您要将大量图像文件上传到Azure存储,我建议使用AzCopy来执行此操作。 AzCopy是一个命令行实用程序,旨在使用具有最佳性能的简单命令将数据复制到Microsoft Azure Blob,文件和表存储中。