【问题标题】:Drag & Drop File Upload拖放文件上传
【发布时间】:2013-01-27 21:42:13
【问题描述】:

所以我在寻找我正在寻找的东西以及如何实现它时有点挣扎。

我有一个基本的 PHP 文件上传器工作,用户按下自定义上传按钮,选择一个文件,然后使用 JS,它检查更改(即用户选择一个文件),然后提交表单上传图片正常。

我现在还想要一个拖放到上传区域。因此,用户可以从他们的文件资源管理器中拖动图像并将其拖放到指定的位置(而不是整个页面),然后一旦该图像被拖放,表单就会自动与他们的图像一起提交并使用相同的 PHP 处理。

这可能和现实吗?

【问题讨论】:

    标签: php jquery html upload drag-and-drop


    【解决方案1】:

    这在不使用任何第三方插件的情况下是绝对现实和可能的。

    以下 sn-ps 应该让您了解它的工作原理:

    放置区域

    $(".drop-files-container").bind("drop", function(e) {
        var files = e.originalEvent.dataTransfer.files;
        processFileUpload(files); 
        // forward the file object to your ajax upload method
        return false;
    });
    

    processFileUpload()-方法:

    function processFileUpload(droppedFiles) {
             // add your files to the regular upload form
        var uploadFormData = new FormData($("#yourregularuploadformId")[0]); 
        if(droppedFiles.length > 0) { // checks if any files were dropped
            for(var f = 0; f < droppedFiles.length; f++) { // for-loop for each file dropped
                uploadFormData.append("files[]",droppedFiles[f]);  // adding every file to the form so you could upload multiple files
            }
        }
    
     // the final ajax call
    
           $.ajax({
            url : "upload.php", // use your target
            type : "POST",
            data : uploadFormData,
            cache : false,
            contentType : false,
            processData : false,
            success : function(ret) {
                     // callback function
            }
           });
    
     }
    

    表单示例

    <form enctype="multipart/form-data" id="yourregularuploadformId">
         <input type="file" name="files[]" multiple="multiple">
    </form>
    

    您可以随意使用类似的内容作为起点。这个浏览器支持你可以在这里找到http://caniuse.com/#feat=xhr2

    当然,您可以添加任何您想要的附加功能,例如进度条、预览、动画...

    【讨论】:

    • 您能否解释一下if(droppedFiles.length &gt; 0) { for(f = 0; f &lt; fileCount; f++) { uploadFormData.append("files[]",droppedFiles[f]); } } 部分,因为我对这一切还很陌生!
    • @Tenatious 我在那里添加了一些 cmets。但它是一个普通的 for 循环,它将删除的文件添加到表单中。
    • 不客气。基本准备好后,您就可以开始做一些花哨的事情了 ;-)
    • 请记住,由于上面的代码使用 .bind() 您需要在创建元素后调用 javascript(例如在您的页脚中)。有关更多信息,请参阅jQuery .bind()。另一种选择是添加$(document).ready( function(){ // code }); 处理程序。避免在创建元素后加载脚本。
    • 还有一个注意事项。您将需要 preventDefault()stopPropogation() 拖放事件,dragleave 和 preventDefault()。这将阻止浏览器在浏览器窗口中加载本地文件。
    猜你喜欢
    • 2012-01-21
    • 2011-09-24
    • 2014-11-04
    • 1970-01-01
    • 2011-05-16
    • 2011-01-18
    • 1970-01-01
    相关资源
    最近更新 更多