2013-12-05 3 views
2

У меня есть форма для загрузки «документов», которую я имел, как и должно, с помощью обычного Codeigniter uploadlibrary. Однако мне нужно, чтобы это работало как вызов Ajax. У меня есть сценарий Uploadifive (который я купил), который является их эквивалентом HTML5 до Uploadify.Использование библиотеки загрузки Codeigniter с Uploadify (Uploadifive)

Моя проблема не в том, что плагин Uploadifive jQuery Ajax отлично работает с моей функцией контроллера. Нет никаких ошибок в консоли, ошибок CI и ошибок от функции ajax. На самом деле, похоже, функция Uploadify даже не работает, поскольку страница перенаправляет на мою функцию контроллера и возвращает ошибку $error = array('error' => $this->upload->display_errors()); в первой части функции контроллера ниже.

У кого-нибудь есть опыт использования Uploadifive с Codeigniter? Что-нибудь отличное от моего кода?

Обратите внимание: Я загружаю все правильные сценарии, библиотеки, модели и т. Д. Кроме того, еще не закодирована формальная проверка. Опять же, все работает без плагина Uploadify

Контроллер функции (т.е. загрузка/add_document):

function add_document() { 

    if (!$this->upload->do_upload()) { 

     // If file upload failed or is invalid, 
     // display error notification 
     $error = array('error' => $this->upload->display_errors()); 
     $this->load->view('upload', $error); 
    }  
    else { 

     // If file upload was successful, 
     // get 'file_name' of the uploaded document 
     $file_uploaded = $this->upload->data(); 
     $file_name = $file_uploaded['file_name']; 

     // Add document to S3 
     $query = $this->s3_model->add_document($file_name); 
     if($query) {   

      // If successful, return S3 file url 
      $document_url = $query; 

      // Add document and form details to db 
      $this->content_model->add_doc($document_url); 

      // Delete temporary document from local 'uploads' folder 
      unlink('uploads/'.$file_name); 
     }     

     $this->load->view('upload'); 
    } 

} 

Форма:

<? echo form_open_multipart('upload/add_document', 'id="upload-doc-form"') ;?> 
    <? echo form_input('title', '', 'placeholder="Title"') ;?><br/> 
    <? echo form_textarea('description', '', 'placeholder="Description"') ;?><br/> 
    <? echo form_input('company', '', 'placeholder="Company"') ;?><br/> 
    <? echo form_input('company_url', '', 'placeholder="Company URL"') ;?><br/> 
    <? echo form_upload('userfile', '', 'id="file-upload"') ;?> 
    <br/><br/> 
    <? echo form_submit('', 'Upload', 'class="doc-submit"') ;?> 
<? echo form_close() ;?> 

JS (завернутые в $(function(){})

var form = $('#upload-doc-form'); 

$('#file-upload').uploadifive({     
    'auto': true, 
    'buttonText': 'BROWSE', 
    'uploadScript': form.attr('action'), 
    'onError': function(errorType) { 
     alert('The error was: ' + errorType); 
    } 
}); 

Вот DEFAULT упаковывают серверный скрипт включен Uploadify, который я не указывая слишком (obvs). Это просто, чтобы показать вам, как Uploadify обрабатывает данные. Я вместо этого использую контроллер ... который я предполагаю, это проблема здесь.

<?php 
/* 
UploadiFive 
Copyright (c) 2012 Reactive Apps, Ronnie Garcia 
*/ 

// Set the uplaod directory 
$uploadDir = '/uploads/'; 

// Set the allowed file extensions 
$fileTypes = array('jpg', 'jpeg', 'gif', 'png'); // Allowed file extensions 

$verifyToken = md5('unique_salt' . $_POST['timestamp']); 

if (!empty($_FILES) && $_POST['token'] == $verifyToken) { 
    $tempFile = $_FILES['Filedata']['tmp_name']; 
    $uploadDir = $_SERVER['DOCUMENT_ROOT'] . $uploadDir; 
    $targetFile = $uploadDir . $_FILES['Filedata']['name']; 

    // Validate the filetype 
    $fileParts = pathinfo($_FILES['Filedata']['name']); 
    if (in_array(strtolower($fileParts['extension']), $fileTypes)) { 

     // Save the file 
     move_uploaded_file($tempFile, $targetFile); 
     echo 1; 

    } else { 

     // The file type wasn't allowed 
     echo 'Invalid file type.'; 

    } 
} 
?> 
+0

Нет никакого вызова ajax? Вы на 100% уверены, что form.attr («действие») верен? Оповести его после строки формы var для проверки. Вы на 100% уверены, что на странице нет ошибок JS при загрузке (прежде чем вы пытаетесь загрузить)? – stef

+0

'uploadScript' src отлично отрисовывается, как в моем браузере. Мое предположение - это код контроллера. Никаких ошибок в консоли ... предупреждений нет и т. Д. Это проблема на стороне сервера с библиотекой 'upload' Codeigniter, я уверен. –

+0

Обновлен мой вопрос, чтобы включить скрипт на стороне сервера по умолчанию, упакованный в Uploadifive. Я должен обработать данные из вызова ajax на контроллер неправильно. –

ответ

2

вопрос, я не устанавливал (или изменений) имя объекта файла, который был отправлен из вызова Ajax на мой контроллер. Библиотека UPLOAD Codeigniter ищет файл с именем, userfile. По умолчанию Uploadifive отправляет строку данных, fileData.

Очень просто редактировать - то, что я должен был пойман ...

В функции Uploadifive Alax, мне пришлось переименовать fileObjName совпадает с библиотекой загрузки CI. Нравится так:

$(function() { 
    $('#file-upload').uploadifive({ 
     'fileObjName': 'userfile', 
     ... 
    }); 
}); 
+1

Вы можете использовать класс загрузки, чтобы выбрать, какое имя вы хотите загрузить, например. if (! $ This-> upload-> do_upload ('fileData')) { – Timmytjc

+0

Довольно уверен, что для использования CI upload lib вы должны установить файл как 'userfile', no? Если вы не измените файл 'system/libraries/upload.php' ... –

+0

Строка 143 системы-> файл upload.php,' public function do_upload ($ field = 'userfile') ' –

0

Вы пытались установить опцию uploadScript в $(this).attr('action') или, может быть <?php echo base_url() . "upload/add_document"; ?>

+0

Я уже пробовал это ... 'uploadScript' src отлично обрабатывает, как в моем браузере. Мое предположение - это код контроллера. –

+0

Что происходит, когда вы запускаете контроллер вручную? Вы посмотрели, какие данные у вас есть? например 'echo"

".print_r($ _REQUEST)."
"; exit;' и правильно ли функция 'uploadifive' находится в' $ (function() {} ', а не в' $ (document) .ready (function() {}) ' –

+0

Это означает то же самое (re: document ready);). И да, включенный скрипт uploadifive php отлично работает при вызове напрямую. Но я хочу использовать его с библиотекой codeigniters. –

Смежные вопросы