如何使用Dropzone.js向您显示已存储在服务器上的文件

Mar*_*esr 54 javascript dropzone.js

我不明白...... call它总是未定义的

创建模拟文件:

var mockFile = { name: "Filename", size: 12345 };
Run Code Online (Sandbox Code Playgroud)

调用默认的addedfile事件处理程序

myDropzone.options.addedfile.call(myDropzone, mockFile);
Run Code Online (Sandbox Code Playgroud)

并可选择显示文件的缩略图:

myDropzone.options. thumbnail.call(myDropzone, mockFile, "/image/url");
Run Code Online (Sandbox Code Playgroud)

Mar*_*esr 44

终于!!

$(function() {
    var mockFile = { name: "banner2.jpg", size: 12345 };
    var myDropzone = new Dropzone("#my-awesome-dropzone");
    myDropzone.options.addedfile.call(myDropzone, mockFile);
    myDropzone.options.thumbnail.call(myDropzone, mockFile, "http://localhost/test/drop/uploads/banner2.jpg");
})
Run Code Online (Sandbox Code Playgroud)

  • 那是因为您实际上没有将任何文件添加到文件数组中.使用thisDropzone.files.push(mockFile); (9认同)
  • 值得注意的是,使用此方法添加的文件与"常规"文件的行为略有不同.首先,我在dropzone实例上调用.removeAllFiles()时似乎无法摆脱它们.我发布这个问题以防万一有人想要贡献:http://stackoverflow.com/questions/23369291/dropzone-js-removeallfiles-does-not-remove-mock-files (3认同)
  • 这个问题是它不会将照片缩小到缩略图视图,而只是显示照片的左上角.... (3认同)
  • 我认为可以在这里找到更好,更更新的答案:/sf/answers/2213900881/ (2认同)

Vic*_*ves 34

您还可以使用以下代码:

  <script>
        Dropzone.options.myAwesomeDropzone = false;
        Dropzone.autoDiscover = false;
        $("#image").dropzone({
            url: "http://someserver.com/upload.php",
            paramName: "image", // The name that will be used to transfer the file
            maxFilesize: 2, // MB
            maxFiles: 5,
            parallelUploads: 5,
            addRemoveLinks: true,
            dictMaxFilesExceeded: "You can only upload upto 5 images",
            dictRemoveFile: "Delete",
            dictCancelUploadConfirmation: "Are you sure to cancel upload?",
            accept: function (file, done) {
                console.log(file)
                if ((file.type).toLowerCase() != "image/jpg" &&
                        (file.type).toLowerCase() != "image/gif" &&
                        (file.type).toLowerCase() != "image/jpeg" &&
                        (file.type).toLowerCase() != "image/png"
                        ) {
                    done("Invalid file");
                }
                else {
                    done();
                }
            },
            init: function () {
                var mockFile = { name: "myimage.jpg", size: 12345, type: 'image/jpeg' };
                this.addFile.call(this, mockFile);
                this.options.thumbnail.call(this, mockFile, "http://someserver.com/myimage.jpg");
            }
        });
    </script>
Run Code Online (Sandbox Code Playgroud)

编辑

由于Dropzone 4.0 init功能的更新可以被称为:

init: function () {
   var mockFile = { name: "myimage.jpg", size: 12345, type: 'image/jpeg' };       
   this.options.addedfile.call(this, mockFile);
   this.options.thumbnail.call(this, mockFile, "http://someserver.com/myimage.jpg");
   mockFile.previewElement.classList.add('dz-success');
   mockFile.previewElement.classList.add('dz-complete');
}
Run Code Online (Sandbox Code Playgroud)

  • fwiw,我在最新的dropzone v中发现chrome中的`addFile`错误,使用`options.addedfile.call`代替了 (2认同)

pun*_*nky 17

我的解决方案> = 4.0,基于"如何显示已存储在服务器上的文件":https://github.com/enyo/dropzone/wiki/FAQ

maxFiles: 1,

init: function () {
    this.on('maxfilesexceeded', function (file) {
        this.removeAllFiles();
        this.addFile(file);
    });

    var mocks = $dropzone.data('dropzone');
    for (var i = 0; i < mocks.length; i++) {
        var mock = mocks[i];
        mock.accepted = true;

        this.files.push(mock);
        this.emit('addedfile', mock);
        this.createThumbnailFromUrl(mock, mock.url);
        this.emit('complete', mock);
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

根据朋克上面的优秀答案,你不应该忘记this._updateMaxFilesReachedClass();最后添加,如下:

init: function () {
    var mockFile = { name: <filename>, size: <filesize>, type: <filetype>, url: <file_url> };
    this.files.push(mockFile);
    this.emit('addedfile', mockFile);
    this.createThumbnailFromUrl(mockFile, mockFile.url);
    this.emit('complete', mockFile);
    this._updateMaxFilesReachedClass();
}
Run Code Online (Sandbox Code Playgroud)

  • 为了使其工作,有必要将文件设置为已接受,否则不会发出事件**maxfilesreached**(请参阅_updateMaxFilesReachedClass代码).一个快速的解决方案是向mockFile添加**accepted:true**.你怎么看? (2认同)
  • @MauroNidola你是对的.没有必要使用`this._updateMaxFilesReachedClass();`如果你没有将`accepted:true`添加到mockFile中. (2认同)

gih*_*uka 5

在这个答案/sf/answers/1243445801/中,它实现了发送缩略图事件.

以下是使用createThumbnailFromUrl执行此操作的示例.

HTML元素;

<form id="sample-img" action="/upload" class="dropzone">
    <div class="dz-default dz-message"></div>
</form>
Run Code Online (Sandbox Code Playgroud)

JS代码;

previewThumbailFromUrl({
    selector: 'sample-img',
    fileName: 'sampleImg',
    imageURL: '/images/sample.png'
});

function previewThumbailFromUrl(opts) {
    var imgDropzone = Dropzone.forElement("#" + opts.selector);
    var mockFile = {
        name: opts.fileName,
        size: 12345,
        accepted: true,
        kind: 'image'
    };
    imgDropzone.emit("addedfile", mockFile);
    imgDropzone.files.push(mockFile);
    imgDropzone.createThumbnailFromUrl(mockFile, opts.imageURL, function() {
        imgDropzone.emit("complete", mockFile);
    });
}
Run Code Online (Sandbox Code Playgroud)

JSFiddle上的工作示例:

  1. 在同一个域上加载图像
  2. 使用crossOrigin加载图像