私は PHP で RESTful API に取り組んでおり、他のデータの中でも画像を投稿できるようにしています。PHP ベースのクライアントでは、投稿される base64 でエンコードされた文字列は次のように取得されます。
$string = base64_encode( file_get_contents('image.jpg') );
次に、単純に逆にすることで、API 側でデコードされます。
file_put_contents('new-image.jpg', base64_decode($string));
これは PHP ベースのクライアントでは問題なく動作しますが、現在、Adobe Air でテストしようとしています。以下の結果は、base64 でエンコードされたかなりの文字列ですが、API に到達すると正しくデコードされません。
var fs = new air.FileStream();
var file = air.File.desktopDirectory.resolvePath(files[0].nativePath);
var photoData = '';
fs.open(file, air.FileMode.READ);
for( var i = 0; i < fs.bytesAvailable; i++ ) {
photoData += fs.readByte();
}
fs.close();
photoData = btoa(photoData); // base64-encoded string
この時点で、btoa()
PHP が使用するものとは異なるエンコーディング方法なのか、それともバイトを不適切に文字列に組み立てているだけなのか疑問に思っています。
私がどこで間違ったのか、何か考えはありますか?私はあまりにも長い間これを見てきました:)