[英]Javascript calling Flash function to upload file
我想知道我能否就以下最佳方法获得建议?
我目前正在从Javascript(使用jQuery)调用Flash AS3函数,此函数将上传已在此Flash文件中选择的文件。 然后,Flash上传该文件,并调用一个处理已处理文件的php文件(upload.php)。 这一切都很好。 但是,还填写了与上载的文件有关的其他详细信息(用户在文本框中输入)。所有这些数据(包括文件已上传到的文件路径)都必须保存到DB。 可以通过对另一个php文件(processData.php)的ajax调用来完成。 我的问题是,当我上传文件时,我无法通过Flash发送其他详细信息以及文件(至少不是我所知道的),这会导致执行2个不同的php脚本。 其次,通过ajax调用的其他php脚本没有要添加到数据库的文件信息。 我可以在会话中存储此信息,但似乎并不能说服我成为解决此问题的最佳方法。 还有其他想法或建议吗?
我有很多代码,所以要避免在我认为很重要的JS部分以及一些Flash片段之后发布一个庞大的问题,以便您可以了解发生了什么...如果有其他问题,希望看到该代码,请随意提出问题并将其发布...
JS:
$("#uploadAudio").submit(function(event) {
event.preventDefault();
var form = $(this);
var title = form.find("#title").val();
var desc = form.find("#desc").val();
var flash = $("#flash");
var flashFileSet = flash.get(0).jsIsFileSelected();
if(flashFileSet)
{
$.ajax({
type: "POST",
url: "processData.php",
dataType: "text",
data: "title=" + title + "&desc=" + desc,
async: false,
success: function() {
audFile.get(0).jsUploadFile();
}
});
}
});
闪
public function fUploader(){
req = new URLRequest();
req.url = ( stage.loaderInfo.parameters.f )? stage.loaderInfo.parameters.f : 'http://virtualmanagementonline.com/ajax/audUpload.php';
pFilterType = ( stage.loaderInfo.parameters.filterType )? stage.loaderInfo.parameters.filterType : 'Images';
pFileFilters = ( stage.loaderInfo.parameters.fileFilters )? stage.loaderInfo.parameters.fileFilters : '*.jpg;*.jpeg;*.gif;*.png';
file = new FileReference();
setup( file );
select_btn.addEventListener( MouseEvent.CLICK, browse );
progress_mc.bar.scaleX = 0;
tm = new Timer( 1000 );
tm.addEventListener( TimerEvent.TIMER, updateSpeed );
cancel_btn.addEventListener( MouseEvent.CLICK, cancelUpload );
cancel_btn.visible = false;
ExternalInterface.addCallback("jsUploadFile", uploadFile);
ExternalInterface.addCallback("jsIsFileSelected", IsFileSelected);
}
public function browse( e:MouseEvent ){
filefilters = [ new FileFilter(pFilterType, pFileFilters) ]; file.browse( filefilters );
}
private function selectHandler( e:Event ){
var tf = new TextFormat();
tf.color = 0x000000;
label_txt.defaultTextFormat = tf;
label_txt.text = file.name;
//file.upload( req );
}
public function IsFileSelected():Boolean{
if(label_txt.text != "")
{
return true;
}
else
{
return false;
}
}
public function uploadFile():void{
file.upload(req);
}
* *注意:由于有很多,因此不会显示所有的闪存代码。 我提出了我认为需要的东西,以了解正在发生的事情。
如果有任何我可以补充的细节,请告诉我。 提前致谢!
由于ExternalInterface
可用,因此您可以发送任意数量的数据以进行刷新。
《 ActionScript 3参考》声明了有关ExternalInterface
的以下内容:
通过HTML页面上的JavaScript,您可以:
-调用ActionScript函数。
-使用标准函数调用符号传递参数。
-向JavaScript函数返回一个值。
您所要做的就是从容器中将ActionScript函数/方法注册为可调用的:
动作脚本
...
ExternalInterface.addCallback("jsUploadFile", uploadFile);
...
public function uploadFile (title:String, desc:String):void
{
var infos:URLVariables = new URLVariables();
infos.desc = desc;
infos.title = title;
/* When you pass the URLVariables to data property of URLRequest,
all variables associated with the URLVariables object will be
sent to the server along with the image uploaded. */
req.data = infos;
file.upload(req);
}
然后,从容器(HTML)调用它,并将附加信息作为参数传递。
的JavaScript
$("#uploadAudio").submit(function(event) {
event.preventDefault();
var form = $(this);
var title = form.find("#title").val();
var desc = form.find("#desc").val();
var flash = $("#flash");
var flashFileSet = flash.get(0).jsIsFileSelected();
if(flashFileSet)
{
/* Instead of sending title and desc to the server via ajax, pass
them as parameters to the jsUploadFile method. So
you can handle everything in one place */
audFile.get(0).jsUploadFile(title, desc);
}
});
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.