具有拖放功能的 Dojo 上传器

Posted

技术标签:

【中文标题】具有拖放功能的 Dojo 上传器【英文标题】:Dojo Uploader with Drag and Drop 【发布时间】:2013-08-15 03:56:48 【问题描述】:

我正在尝试在我的项目中重新创建此示例,以将拖放功能添加到 dojo 上传器:

http://archive.dojotoolkit.org/nightly/dojotoolkit/dojox/form/tests/test_Uploader.html

在 jsfiddle 或我的应用程序中复制完全相同的代码行

if(uploader.addDropTarget && uploader.uploadType=='html5')

为 addDropTarget 返回 undefined,为 uploadType 返回 iframe。 我尝试了各种浏览器,甚至在上传器中添加了 force: html5 但没有任何改变。

请注意,除了 dnd,一切正常。

我正在使用 dojo 1.8.1。

【问题讨论】:

你能粘贴你的代码吗?您是否使用 multiple="true" 设置了文件输入?你需要 html5 插件吗?您是否尝试将上传选项“强制”设置为“html5”?你用的是什么浏览器?... 是的,我添加了它,并且我还需要 html5 插件。关于文件选择和上传部分,一切正常。我只是想启用 dnd 功能。用 chrome 和 firefox 测试。 哦,对不起。你能发布你的代码吗? Philippe,我使用的代码与链接中的代码完全相同。 你用的是什么浏览器?因为如果它在链接中而不是在您的代码中有效,那么某处肯定存在差异...... 【参考方案1】:

在 dojo 1.8 中,上传器尚未完全兼容 AMD。因此,为了使主干测试中的示例在 1.8 中工作,您需要使用 dojox.form.Uploader 构造函数而不是所需的 AMD 模块以编程方式创建上传器。如下:

<form method="post" action="UploadFile.php" id="myForm" enctype="multipart/form-data" >
    <fieldset>
        <legend>DnD Test</legend>
        <input class="browseButton" id="uploader"/>
        <input type="submit" label="Submit" data-dojo-type="dijit/form/Button" />
        <div id="files" data-dojo-type="dojox/form/uploader/FileList" data-dojo-props='uploaderId:"uploader"' ></div>
    </fieldset>
</form>

<div id="dropTarget">Drop files here !</div>

javascript 中:

require([
    'dojo/parser',
    'dojo/dom',
    'dijit/registry',
    'dojox/form/Uploader',
    'dojox/form/uploader/FileList',
    'dojox/form/uploader/plugins/HTML5',
    'dojo/domReady!'
], function(parser, dom, registry, ready)

    var dropTarget = dom.byId('dropTarget'), uploader;

    parser.parse().then(function()

        // You need to use dojox.form.Uploader, as in dojo 1.8, 
        // the module is not fully AMD compliant yet.

        uploader = new dojox.form.Uploader(
            name:'uploadedfile', 
            label:'Select Some Files',
            multiple:true, 
            force:'html5'
        , 'uploader');

        uploader.startup();

        if(require.has('file-multiple'))
            console.debug("Adding a new drop target");
            registry.byId('uploader').addDropTarget(dropTarget); 
        
    );
);

见http://jsfiddle.net/psoares/6r2jZ/

【讨论】:

太棒了!但是,现在上传按钮不起作用。有什么线索吗?

以上是关于具有拖放功能的 Dojo 上传器的主要内容,如果未能解决你的问题,请参考以下文章

Worklight 5.0.5 插件中的 Dojo 调色板是不是存在拖放问题?

如何使用拖放技术编程上传图像

如何在拖放源中创建 Dojo onDrop 事件

以管理员身份运行 VS 时调试拖放

Win10文件拖放打开

H5拖放+FormData接口+NodeJS,完整异步文件上传