2016-04-11 40 views
0

Dizine kodlanmış bir bayt dizisi olan bir dizgiyi base64'e alan bir php betiğine sahibim. Azure'a göndermek için doğru başlık seçeneklerinin ne olduğunu bilmiyorum ve bu dosyayı doğru bir şekilde yazdığı dosyaya yazmak yerine, geçerli bir jpg dosyasına kod çözme ve sonucu yazmasını söyleyeyim. Çeşitli içerik türlerini denedim. (Görüntü/JPEG). Ham bayt dizisi verilerini bile gönderir. Hiçbir şey değil. Azure dosyayı yazar ancak bir jpeg olarak doğru şekilde yazmaz.base64 dizgisini masmavi depolama biriminde jpeg olarak çözme

$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); 
+0

Dosyanızı alma programı bu dönüşümü yapmak kodlu emin misiniz: Burada

kod parçacığı nedir? Veya uygun bir jpg – RiggsFolly

+0

https://msdn.microsoft.com/en-us/library/azure/dd179451.aspx gönderilmesini bekliyor. Php sdks ve .net ve js ve uploadBlobFromText gibi bir dizinin jpg'ye yazılmasına izin veren yöntemler içeren birçok kütüphanesi vardır. Ama bunun için php sdk kullanamıyorum. Api'nin base64 dizesinde bir kod çözme gerçekleştirmesini sağlamak için doğru başlık kombinasyonunu arıyorum. – nvasilescu

+0

Bu belgede, API'nin bu dönüşümü gerçekleştireceğine inanmamı sağlayan hiçbir şey göremiyorum. Neden bunu yapmıyorsunuz ve sonra gerçek bir .jpg '$ the_jpg = base64_decode ($ encodedImage) gönderiyorsunuz; – RiggsFolly

cevap

0

Sen base64 kodlanmış dize için olsun görüntü dizisi base64 olarak kodlanmış birleştirmek ve görüntü içeriğine dize deşifre ardından Azure PHP SDK aracılığıyla Azure Depolama yükleyebilirsiniz.

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 />"; 
} 
+0

iyi, azure php sdk'yi kullanamıyorum çünkü bu, diğer kütüphaneleri de içeremeyen bir php betiğidir. php olanlar var. Sonunda doğru kombinasyonu buldum. – nvasilescu

+0

Sonunda sorununuzu çözdünüz mü? Tebrikler! Lütfen çözümünüzü bir cevap olarak üretebilir ve aynı sorunu yaşayan topluluklar için kendiniz işaretleyebilirsiniz. –