これは近いはずですが、エラーの原因がわかりません。
私のTitaniumアプリには、canvas要素と次のコードを含むWebviewがあります。
function getImageData() {
return canvas.toDataURL('image/png');
}
そのデータを次のようにTitaniumアプリに移動します。
var imageBase64data = webview.evalJS('getImageData()')
「data:image / png;base64」で始まるデータは見栄えがします...
次に、Titaniumで、ログインしたdrupalセッションがあり、この関数を呼び出します。
function uploadImage(imageBase64data, callback) {
var url = REST_PATH + "file.json";
var file = {
filename: utils.createRandomString() + ".png",
file: imageBase64data
// uid: Titanium.App.Properties.getString("userUid"),
// filesize: ""+Titanium.Utils.base64decode(imageBase64data).length,
};
var xhr = Titanium.Network.createHTTPClient({timeout: 30000});
xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");
var authString = Titanium.App.Properties.getString("userSessionName")+'='+Titanium.App.Properties.getString("userSessionId");
xhr.setRequestHeader("Cookie", authString);
xhr.onload = function() {
if(xhr.status == 200) {
var response = xhr.responseText;
callback(response);
}
};
xhr.onerror = function(e) {
alert("There was an error: " + e.error);
Ti.API.info(JSON.stringify(this));
};
xhr.open("POST", url);
xhr.send(file);
}
xhr.onerrorはe.error="undefined"で呼び出されています
トレースは次のようになります。
{
"responseData":{},
"readyState":4,
"connected":true,"UNSENT":0,"DONE":4,"HEADERS_RECEIVED":2,"OPENED":1,"LOADING":3,
"responseText":null,"status":406
}
Cookieヘッダーを追加するまで、以前は「認証が必要」というエラーが発生していたため、認証は機能していると思います。