Отправка данных на контроллер Codeigniter из UploadiFive

Я пытаюсь использовать UploadiFive загрузить некоторые файлы и, по мере их загрузки, добавить информацию о них в базу данных. Пользователь вводит некоторые данные в форму, а затем нажимает кнопку загрузки, после чего файл загружается, и информация из формы добавляется в базу данных с соответствующим именем файла.

Я загрузил файлы, но мне нужно, чтобы форма отправлялась каждый раз, когда файл завершен. Он публикует форму, но я изо всех сил пытаюсь получить имя файла из загруженного файла. Код ниже:

HTML-страница:

<?php echo form_open_multipart('upload/do_upload', 'id="upload_form" name="upload_form"');?>
<div id="queue"></div>
<input id="file_upload" name="file_upload" type="file" multiple="true">
<div id="target"></div>
</form>

<script type="text/javascript">
<?php $timestamp = time();?>
$(function() {
$('#file_upload').uploadifive({
'auto'             : true,
'checkScript'      : '<? echo base_url();?>uploadify/check-exists.php',
'formData'         : {
'timestamp' : '<?php echo $timestamp;?>',
'token'     : '<?php echo md5('unique_salt' . $timestamp);?>'
},
'queueID'          : 'queue',
'onError'          : function(errorType) {
alert('The error was: ' + errorType);
},

'uploadScript'     : '<? echo base_url();?>uploadify/uploadifive.php',
'onUploadComplete' : function (event, queueID, fileObj, response, data, file) {

//Post response back to controller
$.post('<?php echo site_url('upload/do_upload');?>', {
field1: $("#field1").val(),
field2: $("#field2").val(),
field3: $("#field3").val(),
field4: $("#field4").val(),
checkbox1: $("#checkbox1:checked").val(),
field5: $("#field5").val(),
filearray : response},
function(info){
$("#target").append(info);  //Add response returned by controller
});
}
});
});
</script>

Тогда мой контроллер:

//Decode JSON returned
$file = $this->input->post('filearray');
$json_decoded = json_decode($file);

// Get the image filename & full filename with path
$image_file = $json_decoded->{'file_name'};
$path = "assets/photos/highres/".$image_file;

echo "IMAGE FILE NAME: " . $image_file; die;

В целях отладки я просто повторил $image_file,

Кажется, что подает все, кроме ответа от uploadifive.php скрипт. Когда я использую Firebug, я вижу, что получаю ответ, и он выглядит правильно, но ответ (filearray) не публикуется в форму для декодирования.

Любые идеи о том, почему я не могу получить filename из ответа?

6

Решение

TL; DR

использование event.name в onUploadComplete:function(event,data){}

Если вам действительно нужен ответ сервера, то вы можете использовать data (к сожалению, я не могу проверить это, но документация не будет лгать, не так ли?).

Детали

Документация для onUploadComplete говорит нам следующее:

onUploadComplete

Тип ввода
функция

Overridable
N / A

Вызывается один раз для каждой загрузки файла, которая завершается.
аргументы

  • файл
    Файл объекта, который был загружен
  • данные
    Данные, возвращаемые из сценария загрузки на стороне сервера (отражено в uploadifive.php)

демонстрация

$(function() {
$('#file_upload').uploadifive({
'uploadScript'     : '/uploadifive.php'
'onUploadComplete' : function(file, data) {
alert('The file ' + file.name + ' uploaded successfully.');
}
});
});

Это сильно отличается от того, что в вашем коде:

'onUploadComplete' : function (event, queueID, fileObj, response, data, file) {...}

Я не мог проверить UploadiFive, но сделал быструю проверку с Uploadify:

'onUploadComplete' : function(event) {
console.log(JSON.stringify(event,null,4));
}

Который вернул этот вывод:

{
"size": 34405,
"post": {},
"modificationdate": "2015-09-21T02:24:51.597Z",
"name": "Tire-wheel-advisor1.jpg",
"creationdate": "2015-09-21T02:24:51.539Z",
"id": "SWFUpload_0_0",
"type": ".jpg",
"filestatus": -4,
"index": 0
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]