FineUploader Установите параметр, который будет передаваться в качестве постоянного параметра для каждой последующей загрузки после первой успешной загрузки.

Я использую jQuery-версию скрипта Fineuploader (версия 3.3).

Я создал необходимый сценарий загрузки, и все работает, как и ожидалось, но моя цель здесь — загрузить несколько файлов в одну папку, которая динамически создается на основе идентификатора записи базы данных, который создается при загрузке первого файла. Для этого я установил идентификатор записи папки/БД в качестве возвращаемого параметра с информацией JSON, которую я возвращаю в конце моего скрипта, а затем, используя функцию on('complete'...), я пытаюсь установите этот параметр для передачи обратно в мой PHP-скрипт, чтобы мой PHP-скрипт не создавал новую запись БД, создавая тем самым новую папку для каждого файла.

При регистрации результатов в моей консоли JS я вижу, что это не работает, потому что кажется, что мое использование on('complete'...) устанавливает параметр только после завершения загрузки последнего файла. Я попытался просмотреть другие обратные вызовы, подробно описанные на http://docs.fineuploader.com/api/callbacks.html, но не нашел того, который использует ответ JSON из моего PHP-скрипта.

Есть ли способ установить этот параметр при первой успешной загрузке и сохранить его постоянным для каждой последующей загрузки в определенном пакете загрузок файлов?

Вот JS, который я сейчас использую:

jQuery(document).ready(function(){

    var folderID;

    jQuery('#file_multi_upload').fineUploader({
        request: {
            endpoint: '/filehandler'
        },
        debug: true
    }).on('complete', function(event, id, name, responseJSON){
        window.folderID = responseJSON['folder_id'];
        var uploadedFilePath = responseJSON['filepath'];
        var oldVal = jQuery('#uploaded_files').val();

        if (oldVal != '') {
            jQuery('#uploaded_files').val(oldVal+" "+ uploadedFilePath);
        } else {
            jQuery('#uploaded_files').val(uploadedFilePath);
        }
    }).on('upload', function(event, id, filename){
        jQuery(this).fineUploader('setParams', { 'uploadFolderId': folderID });
    });
});

А вот мой скрипт загрузки PHP:

<?php
/*
 * Template Name: File Upload Handler
 */

global $wpdb;

$result = array(
'success' => false
);

if (!empty($_FILES) && is_array($_FILES)) :

if (!isset($_POST['uploadFolderId']) || $_POST['uploadFolderId'] !== '') :

$uploadData = array(
    'uploaded' => date('Y-m-d H:i:s')
);

$wpdb->insert('wp_fileuploads_rel', $uploadData);

$uploadDbEntryId = $wpdb->insert_id;

else :

$uploadDbEntryId = $_POST['uploadFolderId'];

endif;

$targetPath = ABSPATH.'wp-content/uploads/competition_uploads/'.$uploadDbEntryId.'/';

if (!is_dir($targetPath)) {
mkdir($targetPath);
}

foreach ($_FILES as $file) :

$filePath = $targetPath . basename( $file['name']);

if(move_uploaded_file($file['tmp_name'], $filePath)) :

    $insertData = array(
    'created' => date('Y-m-d H:i:s'),
    'filename' => $file['name'],
    'filepath' => $filePath,
    'upload_id' => $uploadDbEntryId
    );

    if ($wpdb->insert('wp_fileuploads', $insertData)) :

    $serverPath = ABSPATH;
    $siteUrl = get_site_url();

    $fileUrl = str_replace($serverPath, $siteUrl .'/', $filePath);

    $result = array(
        'success' => true,
        'filepath' => $fileUrl,
        'folder_id' => $uploadDbEntryId,
        'the_request' => $_POST
    );
    endif;
    //$wpdb->update( $table, $data, $where, $format = null, $where_format = null );

//      echo "The file ".  basename( $file['tmp_name']['name'])." has been uploaded";
endif;

endforeach;

endif;

echo json_encode($result);
?>

Любая помощь в этом будет высоко оценена.


person user1853113    schedule 20.03.2013    source источник


Ответы (1)


Я не вижу хука, который позволяет вам узнать, когда партия готова. В любом случае, что, если пользователь забудет файл и загрузит другую партию? Если я правильно понимаю, то у вас будет две папки. Вы должны дать пользователю кнопку, чтобы сказать «Я закончил загрузку». Затем вы можете переместить файлы в папку назначения, когда это произойдет.

person Jason Noer    schedule 20.03.2013