拖放文件上传

Ten*_*ous 15 php upload jquery html5 drag-and-drop

所以我正在努力寻找我正在寻找的东西以及如何实现它.

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

我现在还想要的是拖放上传区域.因此,用户可以从文件浏览器中拖动图像并将其放在指定位置(而不是整个页面),然后删除该图像后,表单将自动与其图像一起提交并使用相同的PHP处理.

这可能和现实吗?

wil*_*ber 34

这绝对是现实的,可以不使用任何第三方插件.

以下片段应该让您了解它是如何工作的:

掉落区域

$(".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;
});
Run Code Online (Sandbox Code Playgroud)

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

 }
Run Code Online (Sandbox Code Playgroud)

形式的例子

<form enctype="multipart/form-data" id="yourregularuploadformId">
     <input type="file" name="files[]" multiple="multiple">
</form>
Run Code Online (Sandbox Code Playgroud)

随意使用这样的东西作为起点.您可以在此处找到浏览器支持http://caniuse.com/#feat=xhr2

当然,你可以添加你想要的任何额外的东西,如进度条,预览,动画......

  • 请记住,因为上面的代码使用.bind(),您需要在创建元素后调用javascript(例如在页脚中).有关更多信息,请参阅[jQuery .bind()](http://api.jquery.com/bind/).另一个选择是添加`$(document).ready(function(){// code});`handler.在创建元素后避免加载脚本. (2认同)