错误404:azure存储创建一个新块


Error 404: azure storage create a new Block

我正在尝试在azure存储上上传大的特定图像文件(从1 MB到5 GB)。

对于2MB以下的小文件,对于其他文件没有问题,我有"您正在查找的资源已被删除,名称已更改或暂时不可用"的答案。

所以,我试着用下面的代码把文件分成几个块:
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)。

所以我尝试了你的代码,没有得到你得到的404错误。然而,我确实发现了一个问题与你的代码。实际上,您需要更改以下代码行:

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

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

一旦我这样做了,我就可以在我的存储帐户中正确上传文件了。

你的代码有一个错误:

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

应该是:

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

在while上下文中将$blockIds修改为$blockId

我已经测试了你的代码,上传一个几十mb大小的文件到blob存储与修改。

顺便说一下,如果您得到最大执行时间异常,您可以在PHP脚本中设置set_time_limit()函数或在 PHP .ini中设置max_execution_time配置。

我做了更正,有效地,它适用于高达10mb的文件。所以我尝试另一个62 mb的文件,我有以下答案:

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 ?还是有别的东西?