Как предварительно загрузить существующие файлы и отобразить их в таблице загрузки blueimp?

Я использую версию загрузки Blueimp для jquery-ui, и мне нравится, как я могу форматировать таблицу и отображать только что загруженные файлы. Но я хотел бы использовать его и в качестве файлового менеджера, поэтому я хочу предварительно загружать существующие файлы и отображать их так, как если бы они были только что загружены. Как я могу это сделать? Образца ссылки на то, где кто-то еще обращался с этим, было бы достаточно. Кстати, я загружаю несколько разных типов файлов, а не только изображения.

Спасибо!


person Doug Wolfgram    schedule 22.02.2013    source источник


Ответы (4)


У меня тоже была такая же проблема. Это не волшебство, как это работает. Я рекомендую изучить файл UploadHandler.php. Затем вы сможете изменить этот плагин в соответствии с вашими потребностями.

Приведенный выше код во втором сообщении — это просто ajax-вызов скрипта загрузки (по умолчанию index.php в папке server/php/). По умолчанию для метода вызова в объекте $.ajax установлено значение «get».

Откройте файл UploadHandler.php и перейдите к методу класса "initialize(...)". Вы увидите, как обрабатывается вызов с «get». UploadHandler вызывает метод класса this->get(.:.) для подготовки и отправки списка существующих файлов. Если вы используете другой каталог загрузки, вам нужно передать параметр в UploadHänder. Просто измените свойство url в объекте $.ajax, например:

url: $('#fileupload').fileupload('option', 'url')+'?otherDir='+myDir,

то вы должны инициализировать свойство option UploadHandler, прежде чем создавать новый объект UploadHandler следующим образом:

$otherDir = trim($_REQUEST['otherDir']);
$otherDir_url = [anyURL] .'/'.$otherDir;//so that the files can be downloaded by clicking on the link

$options = array(
'upload_dir'=> $otherDir,
'upload_url'=> $otherDir_url,
);

$upload_handler = new UploadHandler($options);
person Selim Acar    schedule 24.04.2013
comment
@Selim У меня проблемы с этой реализацией, и, поскольку ваш ответ устарел, я хотел бы попросить вас просмотреть свой ответ и сообщить мне / нам, актуально ли это для последней версии? Кроме того, могу ли я заинтересовать вас в том, чтобы поделиться здесь какими-либо подсказками? stackoverflow.com/questions/56090215/ - person Stuart; 15.05.2019

Или без вызова ajax:

  1. Подготовьте массив, содержащий сведения о существующих файлах, например:

    var files = [
        {
            "name":"fileName.jpg",
            "size":775702,
            "type":"image/jpeg",
            "url":"http://mydomain.com/files/fileName.jpg",
            "deleteUrl":"http://mydomain.com/files/fileName.jpg",
            "deleteType":"DELETE"
        },
        {
            "name":"file2.jpg",
            "size":68222,
            "type":"image/jpeg",
            "url":"http://mydomain.com/files/file2.jpg",
            "deleteUrl":"http://mydomain.com/files/file2.jpg",
            "deleteType":"DELETE"
        }
    ];
    
  2. Обратный вызов выполнен

    var $form = $('#fileupload');        
    
    // Init fileuploader if not initialized
    // $form.fileupload();
    
    $form.fileupload('option', 'done').call($form, $.Event('done'), {result: {files: files}});
    
person MagyaDEV    schedule 12.02.2014
comment
Другим атрибутом, который можно добавить в массив файлов, является thumbnailUrl, который содержит путь к миниатюре предварительного просмотра сохраненного изображения для отображения. - person Brett Gregson; 17.03.2014
comment
Не уверен в этом, разве вы не хотите, чтобы эти файлы предварительно загружались при загрузке страницы, а не при загрузке файла? Это имеет больше смысла для меня. - person Michael Fever; 15.04.2014
comment
Не обращайте внимания на то, что я ранее сказал! Это работает как шарм. Единственное, что я не совсем понимаю, это deleteURL... Кто-нибудь может это объяснить? - person Michael Fever; 15.04.2014
comment
Для будущих ссылок обратите внимание, что ваши файлы [] могут выглядеть по-другому. Предупредите объект из функции done: в файлеupload-ui.js, чтобы убедиться, как он должен быть структурирован. - person Иво Недев; 01.12.2015
comment
Очень интуитивно понятный способ установить массив файлов. Похоже, автор решил посмеяться над пользователями. Простой $(form).fileupload({ files: files }); определенно имел бы больше смысла. В любом случае, спасибо за рабочий хак, было очень трудно найти рабочий ответ на тривиальный вопрос. - person Cristian E.; 14.07.2016
comment
Привет ребят! Кто-нибудь может объяснить - где этот код должен быть реализован? (main.js, UploadHandler.php, простая страница? и т. д.). Спасибо! - person Kir Mazur; 07.01.2017
comment
Спасибо! Это был ответ для меня. - person user460114; 08.04.2017
comment
MagyaDev или @Cristian E, могу ли я заинтересовать кого-либо из вас в чате, чтобы помочь демистифицировать ваши ответы? Я хотел бы сделать это с помощью PHP и JS, и я очень новичок в создании кода с нуля. - person Stuart; 15.05.2019
comment
MagyaDev, Не могли бы вы лучше объяснить свой код? Я возился с этим и был бы очень признателен за несколько минут вашего времени - person Stuart; 16.05.2019

Нашел код в основном файле js... Непонятно, как он работает. У меня все работает нормально.

// Load existing files:
$.ajax({
    url: $('#fileupload').fileupload('option', 'url'),
    dataType: 'json',
    context: $('#fileupload')[0]
}).done(function (result) {
    $(this).fileupload('option', 'done').call(this, null, {result: result});
});
person Doug Wolfgram    schedule 22.02.2013
comment
Можете ли вы объяснить, как вы это сделали? И можно ли это сделать через переменную URL? Например, php?foldername=customfolder - person VIDesignz; 17.10.2013
comment
Я совсем забыл. :) Теперь я использую код по-другому, так что это не текущая проблема. Я считаю, что приведенный выше вызов делает это, где URL-адрес для URL-адреса ajax на самом деле является селектором jquery, который загружает файл. - person Doug Wolfgram; 17.10.2013

Если кто-то из вас, глядя на это, делает это в .NET, найдите это: (для меня это в application.js

Для достаточно свежей версии есть функция

    // Load existing files:
$.getJSON($('#fileupload form').prop('action'), function(files) {

files = somethingelse;

    var fu = $('#fileupload').data('fileupload');
    fu._adjustMaxNumberOfFiles(-files.length);
    fu._renderDownload(files)
        .appendTo($('#fileupload .files'))

        .fadeIn(function() {
            // Fix for IE7 and lower:
            $(this).show();
        });
});

Однако внутри application.js я делаю это для .NET, и на самом деле мне это нужно.

Затем установите что-то еще либо в свои файлы, либо в "" в зависимости от того, что вы хотите показать. Если убрать строчку files=somethingelse то будут предварительно загружены все файлы из папки.

person Иво Недев    schedule 11.11.2015