简单PHP cURL文件上载到Azure存储blob
我无法使用cURL创建一个新的/简单的PHP脚本/函数,以便使用共享密钥身份验证将简单文件(image.jpg)从本地服务器上载到Azure storage-blob容器。我不想(出于其他原因)使用SDK和/或多个文件/库。我只需要一个函数——fileUpload——就是它 文档没有提供完整的文件覆盖上载(POST)示例。 对于签名/身份验证属性,还不清楚需要哪些头以及需要哪些头。(多个具有不同标题的MSDN站点,例如- 有没有人想分享一下这个简单的例子简单PHP cURL文件上载到Azure存储blob,php,azure,curl,azure-storage,azure-storage-files,Php,Azure,Curl,Azure Storage,Azure Storage Files,我无法使用cURL创建一个新的/简单的PHP脚本/函数,以便使用共享密钥身份验证将简单文件(image.jpg)从本地服务器上载到Azure storage-blob容器。我不想(出于其他原因)使用SDK和/或多个文件/库。我只需要一个函数——fileUpload——就是它 文档没有提供完整的文件覆盖上载(POST)示例。 对于签名/身份验证属性,还不清楚需要哪些头以及需要哪些头。(多个具有不同标题的MSDN站点,例如- 有没有人想分享一下这个简单的例子 <?php error_repo
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
date_default_timezone_set('UTC');
$destinationURL = 'https://mystorage.blob.core.windows.net/blob1/image.jpg';
$accesskey = "qJXTMmw2Esal8/tXgfWk0RLwMNJ6OQKEt0E8EMZ8VhQrzGi5uqJqeKvi1l7iqnOddp7bdtai5rPpC6ynHttl1w==";
$storageAccount = 'mystorage';
$filetoUpload = realpath('./image.jpg');
function upload($filetoUpload, $storageAccount,$destinationURL,$accesskey) {
$currentDate = date("D, d M Y H:i:s");
$postFields = array(
'extra_info' => '123456',
'file_contents'=>'@'.$filetoUpload
);
$headerText=""
."x-ms-version: 2015-02-21\n"
."x-ms-date:" .$currentDate." GMT\n"
."Content-Type: text/plain; charset=UTF-8\n"
."x-ms-blob-content-disposition: attachment; filename=".$filetoUpload."\n"
."x-ms-blob-type: BlockBlob\n"
."x-ms-meta-m1: v1\n"
."x-ms-meta-m2: v2\n"
;
$hash = hash_hmac('sha256', $headerText, base64_decode($accesskey), true);
$sig = base64_encode($hash);
$headerText.="Authorization: SharedKey ".$storageAccount.":".$sig."\n";
$headerText.="Content-Length: 280";
$headers = explode("\n", $headerText);
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_URL, $destinationURL);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
echo ('Result<br/>');
print_r($result);
echo ('Error<br/>');
print_r(curl_error($ch));
curl_close ($ch);
return;
}
upload($filetoUpload, $storageAccount,$destinationURL,$accesskey);
您可以尝试以下代码片段
<?php
$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);
您可以尝试以下代码片段
<?php
$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);
那么,到目前为止您尝试了什么?编辑的问题和给定的当前进度那么,到目前为止您尝试了什么?编辑的问题和给定的当前进度谢谢,就是这样。我建议修复小tipfeler-$authHeader以插入storageAccount:)谢谢您的建议。我已经修好了。你能不能用这么多新行来详细说明$str2sign,例如我需要在$headers中添加x-ms-blob-cache-control…,效果很好。谢谢有没有可能发布一个使用共享访问签名的示例?这只适用于小于64MB的文件,有没有人有发送大型文件的解决方案?谢谢,就是这个。我建议修复小tipfeler-$authHeader以插入storageAccount:)谢谢您的建议。我已经修好了。你能不能用这么多新行来详细说明$str2sign,例如我需要在$headers中添加x-ms-blob-cache-control…,效果很好。谢谢您是否有可能发布一个使用共享访问签名的示例?这只适用于小于64MB的文件,有人有发送大型文件的解决方案吗?