注:私はFlash/ActionScriptについて全く気づいていません。ActionScriptでファイルを非同期でアップロードするにはどうすればよいですか?
私はカメラの画像をキャプチャするためにJquery webcam pluginを使用しています。このプラグインは、キャプチャした画像をサーバにアップロードするActionScriptコードを提供します。それは1つのことを除いてうまくいきます - ファイルが私のウェブページをフリーズしてアップロードしている間。
Flashでの非同期ファイルのアップロードについてはどこで読むことができますか?ファイルを非同期でアップロードするには、次のコードをどのように変更する必要がありますか?
public static function save(file:String):Boolean {
if ("stream" == mode) {
return true;
} else if (null != buffer) {
if ("callback" == mode) {
for (var i = 0; i < 240; ++i) {
var row = "";
for (var j=0; j < 320; ++j) {
row+= buffer.getPixel(j, i);
row+= ";";
}
ExternalInterface.call("webcam.onSave", row);
}
} else if ("save" == mode) {
if (file) {
var e = new JPGEncoder(quality);
var sal = {};
sal.sendAndLoad = XML.prototype.sendAndLoad;
sal.contentType = "image/jpeg";
sal.toString = function() {
return e.encode(JSCam.buffer);
}
var doc = new XML();
doc.onLoad = function(success) {
ExternalInterface.call("webcam.onSave", "done");
}
sal.sendAndLoad(file, doc);
/*
ExternalInterface.call('webcam.debug', "error", "No save mode compiled in.");
return false;
*/
} else {
ExternalInterface.call('webcam.debug', "error", "No file name specified.");
return false;
}
} else {
ExternalInterface.call('webcam.debug', "error", "Unsupported storage mode.");
}
buffer = null;
return true;
}
return false;
}
ActionScriptでのファイルのアップロードは非同期です。それをテストしなくても、フリーズを引き起こしているアップロード以外のもの(おそらく、ピクセルのループ、getPixel()の部分など)であると思います。このコードはActionScriptの古いバージョンであるActionScript 2にあります。 jpgエンコードイメージのようなものは、現在のバージョンのActionScript 3では非常に高速です。カメラにアクセスするための別のjQueryプラグインを見つけることができれば、より最近のもの、AS3を使用すると、これがベストだろうと思います。 –