簡體   English   中英

在azure存儲上將base64字符串解碼為jpeg

[英]decoding base64 string as jpeg on azure storage

我有一個php腳本,該腳本接受一個String中接收到的jpeg,該String是編碼為base64的字節數組。 我不知道要發送給azure並告訴它解碼結果並將其寫入有效的jpg文件的正確標頭選項是什么,而不是將字符串寫入該文件,這樣做現在正確了。 我嘗試了幾種內容類型。 (圖片/ jpeg)。 甚至發送原始字節數組數據。 沒有。 Azure會寫入文件,但不能正確將其作為jpeg寫入。

$contentType = "text/plain; charset=UTF-8";

$curl = curl_init($base_url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
        'Content-Type: '.$contentType,
        'Content-Encoding : BASE64',
        'x-ms-version: 2014-02-14',
        'x-ms-date: '.$currentTime,
        'x-ms-blob-type: BlockBlob',
        'x-ms-blob-content-type: '.$contentType,
        'Authorization: SharedKey zzzzzstorage:'.$signature
    )); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $encodedImage);

$response = curl_exec($curl);

您可以將base64編碼的圖像數組組合成base64編碼的字符串,並將字符串解碼為圖像內容,然后通過Azure PHP SDK上載到Azure存儲。

這是代碼片段:

require_once 'vendor/autoload.php';
use WindowsAzure\Common\ServicesBuilder;
use WindowsAzure\Common\ServiceException;
use WindowsAzure\Blob\Models\CreateBlobOptions;
$image_string = 'base64 encoded string, not begin with `data:image/jpeg;base64,...`';
$imgdata = base64_decode($image_string);
//get file type from decoded content
$f = finfo_open();
$mime_type = finfo_buffer($f, $imgdata, FILEINFO_MIME_TYPE);
$connectionString = "your_storage_account_connection_string";
$blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString);
$blob_name = 'base64image';
$container_name = 'container_name';
$option = new CreateBlobOptions();
$option->setContentType($mime_type);
try{
    $blobRestProxy->createBlockBlob($container_name, $blob_name, $imgdata,$option);
}
catch(Exception $e){
    echo "Error <br />";
    $code = $e->getCode();
    $error_message = $e->getMessage();
    echo $code.": ".$error_message."<br />";
    echo "content " . $imgdata."<br />";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM