PHP Azure blob上载大于允许的大小
我使用下面另一个答案的解决方案。但是,它将只发送高达64MB的文件。如何使用此方法发送大文件?我可以将文件分割成几部分,但一旦发送,我就无法重建它们PHP Azure blob上载大于允许的大小,php,azure-blob-storage,Php,Azure Blob Storage,我使用下面另一个答案的解决方案。但是,它将只发送高达64MB的文件。如何使用此方法发送大文件?我可以将文件分割成几部分,但一旦发送,我就无法重建它们 $accesskey = "qJXTMmw2Esal8/tXgfWk0RLwMNJ6OQKEt0E8EMZ8VhQrzGi5uqJqeKvi1l7iqnOddp7bdtai5rPpC6ynHttl1w==";$storageAccount = 'mystorage'; $filetoUpload = realpath('./im
$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
- 在每个请求中,它都包含一个blockid
- 在这个请求中,您需要将主体中的所有blockid按顺序放置