2016-04-11 10 views
0

jpegをbase64にエンコードされたバイト配列で受け取ったPHPスクリプトがあります。私は紺碧に送る正しいヘッダーオプションは何か分かりませんし、デコードして、結果を有効なjpgファイルに書き込むように伝えます。文字列をファイルに書き込むのではなく、現時点で正しく動作します。 私はいくつかのコンテンツタイプを試しました。 (image/jpeg)。生のバイト配列データを送信する。何もない。 Azureはファイルを書きますが、正しくはjpegとして書きません。デコレートbase64文字列を紺色のストレージに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); 
+0

はあなたのファイルを受け取るプログラムは、この変換を行うためにコード化されていることを確認していますか?または適切なjpg – RiggsFolly

+0

https://msdn.microsoft.com/en-us/library/azure/dd179451.aspxが送信されることを期待しています。 php sdksと.netとjs、そしてjpgに文字列を書き込むことを許可するuploadBlobFromTextのようなメソッドを持つ多くのライブラリがあります。しかし、私はこれでPHP SDKを使用することはできません。私は、apiがbase64文字列のデコードを実行するためのヘッダーの適切な組み合わせを探しています。 – nvasilescu

+0

私はAPIがあなたのこの変換を行うと信じられるようにそのドキュメントの中に何も見ません。なぜあなたはそれをやっていないのですか?実際に.jpg '$ the_jpg = base64_decode($ encodedImage);' – RiggsFolly

答えて

0

あなたは、base64エンコードされた文字列をbase64でエンコードされた画像アレイ、あなたのGETを組み合わせ、そして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 />"; 
} 
+0

を送信してください。これは他のライブラリを含めることができないphpスクリプトなので、私はazure php sdkを使用できませんPHPにはあります。私は最後に正しい組み合わせを見つけました。 – nvasilescu

+0

最後に問題を解決しましたか?おめでとう!答えとしてあなたの解決策を生成して、同じ問題を抱えているコミュニティのためにあなた自身をマークしてください。 –

関連する問題