PhoneGap と Intel XDK を使用してクロスプラットフォーム アプリを作成しています。カメラから Azure Blob Storage に画像をアップロードする方法に行き詰まっています。問題なく SAS を生成しています。画像自体をアップロードしようとすると問題が発生します。アップロードしたい画像 (localhost) への URL があります。最初に、XDK が提供するファイル アップロード ユーティリティを次のように使用しようとしました。
intel.xdk.file.uploadToServer(imageUrl,
azureUrl + info.resourceName + '?' + info.sasQueryString,
"",
"image/jpeg",
"updateUploadProgress");
これにより、アップロードの進行が開始され (どうやら)、updateUploadProgress が 1 回起動されます。画質を落として黒だけの写真 (可能な限り小さいサイズ) を撮影すると、100% になります (そうしないと、パーセンテージが小さくなります) が、その後は何もなりません。完了のために登録したイベントは発生せず、デバッグ中にエラーは表示されませんでした。私の推測では、それは blob 型と関係があるか、PUT の代わりに POST を使用していたということでした。
次に、単純な XMLHttpRequest を使用しようとしました。いくつかの構成の後、キャンバス オブジェクトの出力を次のようにアップロードすることができました。
var canvas = document.createElement("canvas");
var imageObj = document.createElement('img');
imageObj.src = imageUrl;
canvas.width = imageObj.width;
canvas.height = imageObj.height;
var context = canvas.getContext('2d');
context.drawImage(imageObj, 0, 0);
xhr.send(canvas.toDataURL("image/jpeg").split(',')[1]);
問題は、ほぼ正しいサイズのファイルをアップロードすることですが、ファイルが破損していることです。この方法は、エミュレーターだけで、iPhone アプリでもまったく機能しません。XDK で直接 XMLHttpRequest 呼び出しを使用すると、問題が発生する可能性があると思います。
このファイルを Azure にアップロードする方法について何か提案はありますか?