Ошибка 404: хранилище Azure создает новый блок

Я пытаюсь загрузить большие конкретные файлы изображений (от 1 МБ до 5 ГБ) в хранилище Azure.

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

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

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();

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

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
По вопросам рекламы [email protected]