Dropzone.js - 显示服务器上的现有文件

use*_*005 6 php ajax image dropzone.js

我目前正在使用dropzone.js v3.10.2我在显示我已经上传的现有文件时遇到问题.我对php非常称职,但是当涉及到ajax和js时,我的知识有限

如果你可以提供帮助那就太棒了

提前致谢

的index.php

    <html>

<head>  

<link href="css/dropzone.css" type="text/css" rel="stylesheet" />


<script src="ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<script src="dropzone.min.js"></script>

<script>

Dropzone.options.myDropzone = {
    init: function() {
        thisDropzone = this;

        $.get('upload.php', function(data) {


            $.each(data, function(key,value){

                var mockFile = { name: value.name, size: value.size };

                thisDropzone.options.addedfile.call(thisDropzone, mockFile);

                thisDropzone.options.thumbnail.call(thisDropzone, mockFile, "uploads/"+value.name);

            });

        });
    }
};
</script>

</head>

<body>


<form action="upload.php" class="dropzone" id="my-dropzone"></form>

</body>
Run Code Online (Sandbox Code Playgroud)

upload.php的

<?php
$ds          = DIRECTORY_SEPARATOR; 

$storeFolder = 'uploads';  

if (!empty($_FILES)) {

    $tempFile = $_FILES['file']['tmp_name'];         

    $targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds; 

    $targetFile =  $targetPath. $_FILES['file']['name']; 

    move_uploaded_file($tempFile,$targetFile);

} else {                                                           
    $result  = array();

    $files = scandir($storeFolder);                 //1
    if ( false!==$files ) {
        foreach ( $files as $file ) {
            if ( '.'!=$file && '..'!=$file) {       //2
                $obj['name'] = $file;
                $obj['size'] = filesize($storeFolder.$ds.$file);
                $result[] = $obj;
            }
        }
    }

    header('Content-type: text/json');              //3
    header('Content-type: application/json');
    echo json_encode($result);
}
?>
Run Code Online (Sandbox Code Playgroud)

PS.我知道php正在检索数据

提前致谢

达米安

Nik*_*hak 14

对于 Dropzone 5.x

到目前为止给出的解决方案不适用于dropzone 版本 5.x。对我有用的是修改 dropzone 的配置选项,如下所示:

init: function () {
                var mockFile = {
                    name: 'FileName',
                    size: '1000', 
                    type: 'image/jpeg',
                    accepted: true            // required if using 'MaxFiles' option
                };
                this.files.push(mockFile);    // add to files array
                this.emit("addedfile", mockFile);
                this.emit("thumbnail", mockFile, 'http://url/to/file');
                this.emit("complete", mockFile); 
            }
Run Code Online (Sandbox Code Playgroud)

这个概念是,创建一个模拟文件,并调用事件处理程序addedfile并thumbnail绘制预览。然后最后调用complete事件以确保没有显示进度条等。

参考


pep*_*dip 13

我检查了代码(来自starTutorial)它对我来说也不起作用(?)

我设法通过替换它来使它工作:

$.get('upload.php', function(data) {
  $.each(data, function(key,value) {
    var mockFile = { name: value.name, size: value.size };
    thisDropzone.options.addedfile.call(thisDropzone, mockFile);
    thisDropzone.options.thumbnail.call(thisDropzone, mockFile, "uploads/"+value.name);
  });
});
Run Code Online (Sandbox Code Playgroud)

有了这个:

$.getJSON('files/list-all', function(data) {
  $.each(data, function(index, val) {
    var mockFile = { name: val.name, size: val.size };
    thisDropzone.options.addedfile.call(thisDropzone, mockFile);
    thisDropzone.options.thumbnail.call(thisDropzone, mockFile, "uploads/" + val.name);
  });
});
Run Code Online (Sandbox Code Playgroud)

相信这个答案:https://stackoverflow.com/a/5531883/984975

编辑:在4.0版中,现有文件的缩略图将显示在其中的提示栏.解决这个问题:

thisDropzone.emit("complete", mockFile);
Run Code Online (Sandbox Code Playgroud)