使用plupload手动触发“打开文件对话框”

时间:2011-03-03 14:27:59

标签: javascript plupload

我正在使用plupload在上传图片之前对客户端进行缩放。如果用户没有安装flash,silverlight等引擎,我喜欢它优雅地回退到html4的功能。

我希望能够在用户点击页面上的某些元素时启动上传,并且我想处理事件(有时会停止打开文件对话框)。事实上,我想使用javascript弹出文件对话框。

好的,所以除非用户点击浏览按钮(或覆盖浏览按钮的覆盖),否则HTML4(或浏览器,除了chrome:P)不会让我这样做,所以当我得到回退到HTML4我会接受我不能这样做,但大多数用户将安装闪存或Silverlight,他们没有这个限制。所以我的问题是:

如何在plupload中触发文件打开对话框(请记住,我只需要flash和silverlight引擎来执行此操作)。

6 个答案:

答案 0 :(得分:15)

以前的解决方案不适用于带有plupload 2.1.2的iPhone。

以下代码完成了这个技巧(需要jquery):

$("#id_of_the_second_button").click(function() { 
    $('div.moxie-shim input[type=file]').trigger('click');
});

答案 1 :(得分:6)

随着时间的推移,后备运行时间将变得无关紧要。这意味着我们迟早会全部使用HTML5运行时。如果您使用的是HTML5运行时,但不使用pluploadQueue(),这也可以使用:

// Set up and initialise uploader
var uploader = new plupload.Uploader({
  'runtimes' : 'html5',
  'browse_button' : 'id_of_the_first_button'

  // Other options
});

uploader.init();

// Hook in the second button
plupload.addEvent(document.getElementById('id_of_the_second_button'), 'click', function(e) {
  var input = document.getElementById(uploader.id + '_html5');
  if (input && !input.disabled) {
    input.click();
  } // if
  e.preventDefault();
});

答案 2 :(得分:5)

如果有人正在搜索HTML5解决方案,请点击此处:

var up= $('#uploader').pluploadQueue();
if (up.features.triggerDialog) {
    plupload.addEvent(document.getElementById('idOtherButton'), 'click', function(e) {
        var input = document.getElementById(up.id + '_html5');
        if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file]
            input.click();
        }
        e.preventDefault();
    }); 
}

答案 3 :(得分:2)

确定。这似乎不可能这样做,所以除非有人为silverlight和flash组件实现事件句柄,否则我运气不好

答案 4 :(得分:1)

我看了你的问题。

我发现了一些可能有助于解决这个问题的文章。检查一下。这可能会有所帮助......!

  

01. https://stackoverflow.com/questions/210643/in-javascript-can-i-make-a-click-event-fire-programmatically-for-a-file-input-e

     

02. https://stackoverflow.com/questions/2048026/open-file-dialog-box-in-javascript

答案 5 :(得分:0)

@PerHornshøj-Schierbeck 上传者已经初始化之后。渲染输入文件只需花费一些时间。因此,您需要像下面这样等待:

user: item1
alexa: you have ordered item1, your order will be served soon. (OrderFoodIntent)

javascript中的代码相似。为我工作的plupload 2.3.6

请帮助!