2013-07-12 1 views
0

Azure PHP SDK를 사용하여 큰 블록 블롭을 Azure 저장소에 업로드하려고합니다. 그러나이 방법을 수행하는 방법의 샘플을 찾을 수 없으므로 Azure PHP SDK를 사용하여 어떻게 수행합니까?Azure PHP SDK에서 큰 블록 블롭을 청크로 업로드하는 방법은 무엇입니까?

+0

이 질문을 참조하십시오 : http://stackoverflow.com/questions/14889413/how-to-upload-a-blob-to-windows-azure-by-splitting-it-into-chunks-and-calling- pu. HTH. –

+0

@GauravMantri 대답은 유용하지 않습니다. 왜냐하면 PHP 용 Azure SDK는 대답에 언급 된 API를 제공하지 않기 때문입니다. 또한 이미 소스를 살펴 보았지만 API를 사용하는 방법이 명확하지 않습니다. 호출해야하는 특정 워크 플로/메서드 체인이있는 것으로 보입니다. –

답변

1

다음은 작동하는 예제입니다. 위의 링크에서 언급 한 두 가지 기능을 사용했습니다.

<?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 />"; 
} 
?> 

희망이 있습니다.

+0

샘플 주셔서 감사합니다! 나는 가능한 한 빨리 그것을 살펴보고 그것을 시험해 보면 대답을 받아 들일 것이다. –

+0

안녕하세요, 작동하지 않습니다. 5-6 개의 블록을 업로드하면 정지되고 잘못된 형식의 응답 오류가 발생합니다. 또한 작은 오타가 있습니다 ->'count (blockIds)'는'count ($ blockIds)'여야합니다. 아이디어? –

+0

정확한 오류를 공유 할 수 있습니까? 또한 Fiddler와 같은 도구를 통해 요청/응답을 추적하여 전선을 통해 전송되는 내용을 정확하게 알면 도움이됩니다. 불행히도 PHP에 대한 지식은 전혀 없습니다. 나는 저장소 에뮬레이터로 이것을 시도하고 위의 코드를 사용하여 약 4MB 파일을 업로드했는데 그것은 나에게 잘 맞았다. –

관련 문제