Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
PHP Azure blob上载大于允许的大小_Php_Azure Blob Storage - Fatal编程技术网

PHP Azure blob上载大于允许的大小

PHP Azure blob上载大于允许的大小,php,azure-blob-storage,Php,Azure Blob Storage,我使用下面另一个答案的解决方案。但是,它将只发送高达64MB的文件。如何使用此方法发送大文件?我可以将文件分割成几部分,但一旦发送,我就无法重建它们 $accesskey = "qJXTMmw2Esal8/tXgfWk0RLwMNJ6OQKEt0E8EMZ8VhQrzGi5uqJqeKvi1l7iqnOddp7bdtai5rPpC6ynHttl1w==";$storageAccount = 'mystorage'; $filetoUpload = realpath('./im

我使用下面另一个答案的解决方案。但是,它将只发送高达64MB的文件。如何使用此方法发送大文件?我可以将文件分割成几部分,但一旦发送,我就无法重建它们

$accesskey = "qJXTMmw2Esal8/tXgfWk0RLwMNJ6OQKEt0E8EMZ8VhQrzGi5uqJqeKvi1l7iqnOddp7bdtai5rPpC6ynHttl1w==";$storageAccount = 'mystorage';
$filetoUpload = realpath('./image.jpg');

$containerName = '<yourblobcontainer>';
$blobName = 'image.jpg';

$destinationURL = "https://$storageAccount.blob.core.windows.net/$containerName/$blobName";

function uploadBlob($filetoUpload, $storageAccount, $containerName, $blobName, $destinationURL, $accesskey) {
$currentDate = gmdate("D, d M Y H:i:s T", time());
$handle = fopen($filetoUpload, "r");
$fileLen = filesize($filetoUpload);

$headerResource = "x-ms-blob-cache-control:max-age=3600\nx-ms-blob-type:BlockBlob\nx-ms-date:$currentDate\nx-ms-version:2015-12-11";
$urlResource = "/$storageAccount/$containerName/$blobName";

$arraysign = array();
$arraysign[] = 'PUT';               /*HTTP Verb*/  
$arraysign[] = '';                  /*Content-Encoding*/  
$arraysign[] = '';                  /*Content-Language*/  
$arraysign[] = $fileLen;            /*Content-Length (include value when zero)*/  
$arraysign[] = '';                  /*Content-MD5*/  
$arraysign[] = 'image/png';         /*Content-Type*/  
$arraysign[] = '';                  /*Date*/  
$arraysign[] = '';                  /*If-Modified-Since */  
$arraysign[] = '';                  /*If-Match*/  
$arraysign[] = '';                  /*If-None-Match*/  
$arraysign[] = '';                  /*If-Unmodified-Since*/  
$arraysign[] = '';                  /*Range*/  
$arraysign[] = $headerResource;     /*CanonicalizedHeaders*/
$arraysign[] = $urlResource;        /*CanonicalizedResource*/

$str2sign = implode("\n", $arraysign);

$sig = base64_encode(hash_hmac('sha256', urldecode(utf8_encode($str2sign)), base64_decode($accesskey), true));  
$authHeader = "SharedKey $storageAccount:$sig";

$headers = [
    'Authorization: ' . $authHeader,
    'x-ms-blob-cache-control: max-age=3600',
    'x-ms-blob-type: BlockBlob',
    'x-ms-date: ' . $currentDate,
    'x-ms-version: 2015-12-11',
    'Content-Type: image/png',
    'Content-Length: ' . $fileLen
];

$ch = curl_init($destinationURL);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_INFILE, $handle); 
curl_setopt($ch, CURLOPT_INFILESIZE, $fileLen); 
curl_setopt($ch, CURLOPT_UPLOAD, true); 
$result = curl_exec($ch);

echo ('Result<br/>');
print_r($result);

echo ('Error<br/>');
print_r(curl_error($ch));

curl_close($ch);
}

uploadBlob($filetoUpload, $storageAccount, $containerName, $blobName, $destinationURL, $accesskey);
$accesskey=“qJXTMmw2Esal8/tXgfWk0RLwMNJ6OQKEt0E8EMZ8VhQrzGi5uqJqeKvi1l7iqnOddp7bdtai5rPpC6ynHttl1w=”$storageAccount='mystorage';
$filetoUpload=realpath('./image.jpg');
$containerName='';
$blobName='image.jpg';
$destinationURL=“https://$storageAccount.blob.core.windows.net/$containerName/$blobName”;
函数uploadBlob($filetoUpload、$storageAccount、$containerName、$blobName、$destinationURL、$accesskey){
$currentDate=gmdate(“D,dm Y H:i:st”,time());
$handle=fopen($filetoUpload,“r”);
$fileLen=filesize($filetoUpload);
$headerResource=“x-ms-blob-cache-control:max age=3600\nx ms blob类型:BlockBlob\nx ms日期:$currentDate\nx ms版本:2015-12-11”;
$URLROURCE=“/$storageAccount/$containerName/$blobName”;
$arraysign=array();
$arraysign[]='PUT';/*HTTP动词*/
$arraysign[]='';/*内容编码*/
$arraysign[]='';/*内容语言*/
$arraysign[]=$fileLen;/*内容长度(包括零时的值)*/
$arraysign[]='';/*Content-MD5*/
$arraysign[]='image/png';/*内容类型*/
$arraysign[]='';/*日期*/
$arraysign[]='';/*如果自*/
$arraysign[]='';/*如果匹配*/
$arraysign[]='';/*如果没有匹配项*/
$arraysign[]='';/*如果自*/
$arraysign[]='';/*范围*/
$arraysign[]=$headerResource;/*CanonicalizedHeaders*/
$arraysign[]=$urlResource;/*CanonicalizedResource*/
$str2sign=内爆(“\n”,$arraysign);
$sig=base64_编码(hash_hmac('sha256',urldecode(utf8_编码($str2sign)),base64_解码($accesskey),true));
$authHeader=“SharedKey$storageAccount:$sig”;
$headers=[
“授权:”。$authHeader,
'x-ms-blob-cache-control:max age=3600',
“x-ms-blob-type:BlockBlob”,
“x-ms-date:”.$currentDate,
“x-ms-version:2015-12-11”,
'内容类型:图像/png',
“内容长度:”。$fileLen
];
$ch=curl\u init($destinationURL);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,“PUT”);
curl_setopt($ch,CURLOPT_infle,$handle);
curl_setopt($ch,CURLOPT_infiresize,$fileLen);
curl_setopt($ch,CURLOPT_UPLOAD,true);
$result=curl\u exec($ch);
回声('Result
'); 打印(结果); echo('Error
'); 打印错误(卷曲错误($ch)); 卷曲关闭($ch); } uploadBlob($filetoUpload、$storageAccount、$containerName、$blobName、$destinationURL、$accesskey);
如果您想使用PHP将大文件上载到Azure Blob存储,可以使用

比如说

<?php

require_once "vendor/autoload.php"; 

use MicrosoftAzure\Storage\Blob\BlobRestProxy;
use MicrosoftAzure\Storage\Common\Exceptions\ServiceException;

use MicrosoftAzure\Storage\Blob\Models\Block;
use MicrosoftAzure\Storage\Blob\Models\CommitBlobBlocksOptions;

define('CHUNK_SIZE', 1024*1024);//Block Size = 1 MB
try {

    $connectionString = "DefaultEndpointsProtocol=https;AccountName=andyprivate;AccountKey=h4pP1fe76m8hdksFW3TvkO6hgw09Mjue7yJOnULPI/g2eU8LGJ+a6k6SrU6dUkOU77waZfU8CacyVMlTWAUA5A==;EndpointSuffix=core.windows.net";
   
    $blobRestProxy = BlobRestProxy::createBlobService($connectionString);
    $containerName = "upload";
    $blobName = "psd7003.xml";
    $fileName="d:/download/psd7003.xml";
    $content = fopen("d:/download/psd7003.xml", "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";
    $options = new CommitBlobBlocksOptions();
    $option -> setContentType(mime_content_type($fileName));
    $blobRestProxy -> commitBlobBlocks($containerName, $blobName, $blockIds,$options);
    echo " -----------------------------------------";
    echo " \n ";
    echo "Blob created successfully.";
}
catch(Exception $e){
    $code = $e->getCode();
    $error_message = $e->getMessage();
    echo $code.": ".$error_message."<br />";
}
?>

此外,如果您想用RESTAPI实现它,请参考以下步骤

1.将整个文件读取到字节,并在代码中将文件分成更小的部分。
  • 每件可能8MB
2.用API上传每个片段。
  • 在每个请求中,它都包含一个blockid
3.用API组成blob。
  • 在这个请求中,您需要将主体中的所有blockid按顺序放置

您有任何更新吗?它对你有用吗?如果它对你有帮助,你能接受它作为一个答案吗?它可能会帮助更多有类似问题的人。