Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过分块上传Azure PHP SDK中的大块Blob?_Php_Azure - Fatal编程技术网

如何通过分块上传Azure PHP SDK中的大块Blob?

如何通过分块上传Azure PHP SDK中的大块Blob?,php,azure,Php,Azure,我想通过使用Azure PHP SDK将大数据块分块上传到Azure存储,但我在任何地方都找不到如何执行此操作的示例,因此我如何使用Azure PHP SDK执行此操作?下面是一个工作示例。我使用了上面链接中提到的两个函数 <?php require_once 'WindowsAzure/WindowsAzure.php'; use WindowsAzure\Common\ServicesBuilder; use WindowsAzure\Common\ServiceException;

我想通过使用Azure PHP SDK将大数据块分块上传到Azure存储,但我在任何地方都找不到如何执行此操作的示例,因此我如何使用Azure PHP SDK执行此操作?

下面是一个工作示例。我使用了上面链接中提到的两个函数

<?php 
require_once 'WindowsAzure/WindowsAzure.php';
use WindowsAzure\Common\ServicesBuilder;
use WindowsAzure\Common\ServiceException;
use WindowsAzure\Blob\Models\Block;
use WindowsAzure\Blob\Models\BlobBlockType;
define('CHUNK_SIZE', 1024*1024);//Block Size = 1 MB
try {

    $connectionString = "UseDevelopmentStorage=true";
    $instance = ServicesBuilder::getInstance();
    $blobRestProxy = $instance -> createBlobService($connectionString);
    $containerName = "mycontainer";
    $blobName = "DSC01166.jpg";
    $content = fopen("d:\DSC01166.jpg", "rb");
    $index = 0;
    $continue = True;
    $counter = 1;
    $blockIds = array();
    while (!feof($content))
    {
        $blockId = str_pad($counter, 6, "0", STR_PAD_LEFT);
        $block = new Block();
        $block -> setBlockId(base64_encode($blockId));
        $block -> setType("Uncommitted");
        array_push($blockIds, $block);
        echo $blockId . " | " . base64_encode($blockId) . " | " . count($blockIds);
        echo " \n ";
        echo " -----------------------------------------";
        $data=fread($content, CHUNK_SIZE);
        echo "Read " . strlen($data) . " of data from file";
        echo " \n ";
        echo " -----------------------------------------";
        echo " \n ";
        echo " -----------------------------------------";
        echo "Uploading block #: " . $blockId + " into blob storage. Please wait.";
        echo " -----------------------------------------";
        echo " \n ";
        $blobRestProxy -> createBlobBlock($containerName, $blobName, base64_encode($blockId), $data);
        echo "Uploaded block: " . $blockId . " into blob storage. Please wait";
        echo " \n ";
        echo " -----------------------------------------";
        echo " \n ";
        $counter = $counter + 1;
    }
    fclose($content); 
    echo "Now committing block list. Please wait.";
    echo " -----------------------------------------";
    echo " \n ";
    echo "hello";
    $blobRestProxy -> commitBlobBlocks($containerName, $blobName, $blockIds);
    echo " -----------------------------------------";
    echo " \n ";
    echo "Blob created successfully.";
}
catch(Exception $e){
    // Handle exception based on error codes and messages.
    // Error codes and messages are here: 
    // http://msdn.microsoft.com/en-us/library/windowsazure/dd179439.aspx
    $code = $e->getCode();
    $error_message = $e->getMessage();
    echo $code.": ".$error_message."<br />";
}
?>


希望这有帮助。

请查看以下问题:。HTH.@GauravMantri答案没有用处,因为Azure SDK for PHP没有提供答案中提到的API。另外,我已经查看了源代码,但不清楚如何使用API-似乎需要调用特定的工作流/方法链。感谢您提供的示例!我会尽快看它,一旦我测试它,我就会接受答案。嗨,这不起作用。上传5-6个块后,它会挂起,然后抛出一个格式错误的响应错误。还有一个小的输入错误->
count(blockid)
应该是
count($blockid)
。想法?你能分享你得到的确切错误吗?如果您通过像Fiddler这样的工具跟踪您的请求/响应,这样您就可以准确地知道通过网络发送的是什么,这也会有所帮助。不幸的是,我对PHP的了解不多。我在storage emulator上尝试了这一点,并使用上面的代码上传了大约4 MB的文件,对我来说效果很好。我发现HTTP可以工作,但HTTPS不能,所以我正在调查潜在的CA/证书问题。对linux上的HTTPS问题有何想法?我已将blob存储证书添加为受信任的,以防万一,但仍然不起作用(相同的错误)