2013-03-20 1 views
1

Я использую версию jQuery сценария Fineuploader (версия 3.3).FineUploader Установите параметр для передачи как «постоянного» параметра для каждой последующей загрузки после первой успешной загрузки

Я создал необходимый сценарий загрузки, и все, кажется, работает как ожидалось, но моя цель здесь - загрузить несколько файлов в одну папку, которая динамически создается на основе идентификатора записи базы данных, который создается, когда первый файл добавления. Для этого я установил идентификатор записи папки/db в качестве возвращаемого параметра с информацией 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); 
?> 

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

ответ

-1

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