2015-08-26 3 views
0

Я пытаюсь загрузить большие файлы изображений (от 1 МБ до 5 ГБ) на лазурном хранилище.Ошибка 404: azure storage create new Block

Для небольших файлов до 2 МБ проблем нет для других. У меня есть «Ресурс, который вы ищете, был удален, изменилось его имя или временно недоступно». ответ.

Итак, я попытался отделить файл в Serveral блоки со следующим кодом:

require_once 'vendor/autoload.php'; 

use WindowsAzure\Common\ServicesBuilder; 
use WindowsAzure\Common\ServiceException; 
use WindowsAzure\Blob\Models\CreateContainerOptions; 
use WindowsAzure\Blob\Models\PublicAccessType; 
use WindowsAzure\Blob\Models\Block; 
use WindowsAzure\Blob\Models\BlobBlockType; 

define('CHUNK_SIZE', 1024*1024); //Block Size = 1MB 
$connectionString = "DefaultEndpointsProtocol=...."; 
$blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString); 

$uploadfile =$_FILES['fileToUpload']['tmp_name']; 
$content = fopen($uploadfile, "r"); 
$blob_name = $_FILES['fileToUpload']['name']; 
$container_name = "natives"; 

try{ 
    $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); 

     $data = fread($content, CHUNK_SIZE); 

     echo " \ n"; 
     echo "Read ". strlen($data) . "of data from file <br />"; 
     echo "Uploading block #:". $blockId . "into blob storage. Please wait. <br />"; 
     $blobRestProxy -> createBlobBlock($container_name, $blob_name, base64_encode($blockIds), $data); 

     echo "Uploaded block: ".$blockId . "into blob storage. <br />"; 

     $counter = $counter + 1; 

    } 
    echo "Now committing block list. Please wait. <br />"; 
    $blobRestProxy -> commitBlobBlocks($container_name, $blob_name, $blockIds); 
    echo "Blob created successfully. <br />"; 
} 
catch(Exception $e){ 
    echo "Error <br />"; 
    $code = $e->getCode(); 
    $error_message = $e->getMessage(); 
    echo $code.": ".$error_message."<br />"; 
    echo "Files : ".$_FILES['fileToUpload']['name']."<br />"; 
    echo "content " . $content."<br />"; 
} 
fclose($content); 

Работа в режиме отладки проблема исходит от

$block = new Block(); 

Тем не менее, я включаю «Block ", поэтому я не понял эту проблему, и я не знаю, как получить дополнительную информацию об этой ошибке. У меня есть только белая страница и ошибка 404 на странице разработки (POST).

+0

Вы можете проверить, существует ли контейнер, в котором вы загружаете blob? Это может быть первой причиной вашей ошибки 404. –

+0

Благодарим вас за ответ, но контейнер существует, и я могу добавить blob напрямую, не пройдя мимо блока. – Lilice

ответ

0

Итак, я попробовал ваш код и не получил ошибку 404, которую вы получаете. Однако я нашел проблему с вашим кодом. По существу, вы должны изменить следующую строку кода:

$blobRestProxy -> createBlobBlock($container_name, $blob_name, base64_encode($blockIds), $data); 

в

$blobRestProxy -> createBlobBlock($container_name, $blob_name, base64_encode($blockId), $data); 

После того, как я сделал это, я был в состоянии загрузить файлы должным образом на моем счете хранения.

0

Существует ошибочное в коде:

$blobRestProxy -> createBlobBlock($container_name, $blob_name, base64_encode($blockIds), $data); 

Должно быть:

$blobRestProxy -> createBlobBlock($container_name, $blob_name, base64_encode($blockId), $data); 

Изменить $blockIds в $blockId в вашем контексте в то время.

Я проверил ваш код, чтобы загрузить файл размера десятков МБ в хранилище blob с модификацией. Он работал хорошо.

Кстати, если вы получаете максимальное исключение времени выполнения, вы можете установить set_time_limit() функцию в PHP скрипт или max_execution_time конфигурации в php.ini.

0

Я сделал исправление и эффективно, он работает для файлов до 10 Мбит. Поэтому я стараюсь с другим файлом 62 Мбит и у меня есть следующий ответ:

Read 0 of data from file 
Uploading block #:000001 into blob storage. Please wait. 
Error 
0: 'blob' can't be NULL or empty. 
Files : 
content 

Это связано с размером файлов в $ _FILES? или есть что-то еще?

+0

Казалось, что не удалось прочитать файл, вы можете попытаться установить blob с помощью каталога файлов сначала, чтобы проверить функции хранения Azure, а затем проверить файлы для загрузки. –

Смежные вопросы