Intereting Posts

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> 

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

PS. Я знаю, что php извлекает данные

заранее спасибо

Damian

Я проверил код (из 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); }); }); 

с этим:

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

Ответьте на этот ответ: https://stackoverflow.com/a/5531883/984975

EDIT: в версии 4.0 миниатюры существующих файлов будут показаны с помощью битовой панели. Чтобы решить эту проблему, добавьте:

 thisDropzone.emit("complete", mockFile); 

Именно так я его и реализовал. Я использовал createThumbnailFromUrl , используя использование эскиза события.

HTML-элемент;

 <form id="sample-img" action="/upload" class="dropzone"> <div class="dz-default dz-message"></div> </form> 

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

Для 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); } 

Концепция заключается в создании файла-макета и вызове обработчиков событий addedfile и thumbnail для предварительного просмотра. И затем, наконец, вызовите complete событие, чтобы убедиться, что не отображаются индикаторы выполнения и т. Д.

Справка

У меня возникли проблемы с maxFiles / maxfilesexceeded и взять некоторое время на поиск anwser, а затем я нашел эти ссылки ниже:

https://www.bountysource.com/issues/1444854-use-files-already-stored-on-server-wiki-example-incomplete?utm_campaign=plugin&utm_content=tracker%2F283989&utm_medium=issues&utm_source=github

 $.each(obj, function(i, item) { ///faking the BytesSent its not essanail to me.. if you need it just pass the correct one var upload = {bytesSent: 12345}; /// again fake the size.. var mockFile = {name: item.name, size: 12345, accepted: true}; mockFile.upload = upload; mockFile.kind = "file"; Dropzone.forElement("#editfileuploader").emit("addedfile", mockFile); //push the file to files array because getAcceptedFiles using this array length to get the currct files count.. Dropzone.forElement("#editfileuploader").files.push(mockFile); //this for lettig dropzone to creat the thumbnail(item.ts has the file location) Dropzone.forElement("#editfileuploader").emit("thumbnail", mockFile, item.ts); //to show the success mark and to return image id response Dropzone.forElement("#editfileuploader").emit("success", mockFile, item.id); });