";请求日期标头太旧";将大量文件上载到blob存储区时出错



我的服务器上有大量的图像文件(约900000个),我正在使用Azure Client Library for PHP进行循环并将我的文件上传到Azure Blob Storage。我的上传脚本运行了大约2天,然后突然停止并在错误以下输出。

10月19日01:28:14 ik1-315-17878 php:php致命错误:未捕获异常"MicrosoftAzure\Storage\Common\Exceptions\ServiceException"显示消息"失败:#012代码:403#012值:服务器未能验证请求。确保Authorization标头的值格式正确,包括签名#012详细信息(如有):身份验证失败服务器未能对请求进行身份验证。确保的值授权标头的格式正确,包括签名#012请求ID:e7f247d6-001e-0022-142e-48abcc000000#012时间:2017-10-18T16:28:14.4980791Z请求日期标题太旧:"2017年10月18日星期三16:12:27GMT'.'在里面/home/t-matsumoto/GAZOU/vvendor.microsoft.com/azure storage/src/Common/Internal/ServiceRestProxy.php:486#012Stack跟踪:#012#0/home/t-matsumoto/GAZOU/vvendor/microsoft/azure-storage/src/Common/Internal/ServiceRestProxy.php(404):MicrosoftAzure\Storage\Common\Internal\ServiceRestProxy::throwIfError(对象(GuzzleHttp\Psr7\Respon在里面/home/t-matsumoto/GAZOU/vvendor/microsoft/azure-storage/src/Common/Internal/ServiceRestProxy.php486线上

我已经搜索了原因,很可能是因为我的脚本发出请求时的时间戳与Azure收到请求时的日期戳相比太旧了。根据上面的错误消息,提出请求的时间是"2017年10月18日星期三格林尼治标准时间16:12:27",收到请求的时间为"2017-10-18T16:28:14.4980791Z"(晚了大约15分钟)。但我仍然不明白的是,为什么我的脚本运行了一段时间没有错误,然后错误突然发生了。有人能向我解释一下这种现象和解决方案,让我的脚本稳定运行,没有错误吗。

我的php脚本如下所示

require_once 'vendor/autoload.php';
use MicrosoftAzureStorageCommonServicesBuilder;
use MicrosoftAzureStorageCommonServiceException;
$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://learn.microsoft.com/en-us/azure/storage/blobs/storage-php-how-to-use-blobs

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

使用Python SDK 的Azure存储错误


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

最新更新