У меня есть форма для загрузки «документов», которую я имел, как и должно, с помощью обычного Codeigniter upload
library. Однако мне нужно, чтобы это работало как вызов 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.';
}
}
?>
Нет никакого вызова ajax? Вы на 100% уверены, что form.attr («действие») верен? Оповести его после строки формы var для проверки. Вы на 100% уверены, что на странице нет ошибок JS при загрузке (прежде чем вы пытаетесь загрузить)? – stef
'uploadScript' src отлично отрисовывается, как в моем браузере. Мое предположение - это код контроллера. Никаких ошибок в консоли ... предупреждений нет и т. Д. Это проблема на стороне сервера с библиотекой 'upload' Codeigniter, я уверен. –
Обновлен мой вопрос, чтобы включить скрипт на стороне сервера по умолчанию, упакованный в Uploadifive. Я должен обработать данные из вызова ajax на контроллер неправильно. –