2012-05-10 21 views
0

我在想,如果我能得到什么,最好的办法做到以下几点将是...的Javascript调用闪存功能上传文件

我目前从JavaScript调用一个Flash AS3函数(使用jQuery SOM建议)这个函数上传一个已经在这个Flash文件中被选中的文件。 Flash然后上传文件并调用处理处理文件的php文件(upload.php)。这一切工作正常。然而,还有其他与上传文件有关的详细信息(由用户在文本框中输入)。所有这些数据(包括上传文件的路径)都必须保存到数据库中。这可以通过调用另一个php文件(processData.php)的ajax来完成。我的问题是,当我上传文件时,我无法通过Flash发送其他详细信息(至少不是我知道的),从而导致执行2个不同的PHP脚本。其次,通过ajax调用的另一个php脚本没有文件信息添加到数据库。如果我想要的话,我可以将这些信息存储在会话中,但它似乎并不能说服我作为解决此问题的最佳方式。任何其他想法或建议?

我有很多代码可以避免让这个问题变得非常棘手JS后面的部分我认为很重要,一些Flash片段让你可以了解发生了什么...如果的theres anyhting否则你几乎看到代码的随意问及生病后它...

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); 
    } 

* *注意:并非所有的Flash代码都显示,因为有很多。我提出我认为需要了解究竟发生了什么。

如果有什么我可以添加进一步的细节请让我知道。提前致谢!

+0

我很困惑你为什么使用Flash? –

回答

1

由于ExternalInterface可用,您可以发送尽可能多的数据,因为你想闪光。
ActionScript 3 Reference状态以下有关ExternalInterface:在HTML页面上

从JavaScript,您可以:
- 调用ActionScript功能。
- 使用标准函数调用符号传递参数。
- 将值返回给JavaScript函数。

所有你需要做的就是注册一个ActionScript函数/方法从容器调用:

的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); 
    } 
}); 

希望它能帮助。

+0

非常感谢你们! :) –