2015-04-17 3 views
0

Могу ли я попросить вас помочь?как отправить файл с помощью jquery в контроллер codeigniter

Я пытаюсь загрузить файл и передать все данные контроллеру codeigniter с помощью jquery.

мой взгляд файла:

<div class="form-group"> 
    <label class="col-md-4 control-label">Item Image</label> 
    <div class="col-md-8"> 
     <input class="form-control" type="file" placeholder="" id="itemImage" name="itemImage" data-parsley-required="true" /> 
    </div> 
</div> 
<button type="button" onclick="add_item();">Sumit</button> 
<script> 
function add_item(){ 
    $.post('<?php echo site_url('admin_newitem/add_item'); ?>', 
     { 
      itemId   : $('#itemId').val(), 
      itemImage  : $('#itemImage').val() 
     }, 
     function(data){ 
       if(data.result=='SUCCESS'){ 
       $('#itemId').val(''); 
       $('#itemImage').val(''); 
        //show success 

        }else{ 
        //show error 
        } 
      },'json' 
     ); 
    } 
</script> 

Мой контроллер:

function add_item(){ 
    $this->output->set_status_header(200); 
    $this->output->set_header('Content-Type: application/json'); 
    $itemId   = $this->input->post('itemId'); 
    $itemImage  = $this->input->post('itemImage');; 
    $config['upload_path'] = realpath(APPPATH.'../assets_main/img/item/'); 
    $config['allowed_types'] = 'jpg|jpeg'; 
    $config['max_size'] = '100'; 
    $config['max_width'] = '200'; 
    $config['max_height'] = '200'; 
    $file_name = $config['file_name'] = md5(uniqid(mt_rand())); 
    $config['remove_spaces'] = TRUE; 
    $this->load->library('upload', $config); 
    if(!$itemImage){ 
     $jdata['result'] = "FAILED"; 
     $jdata['message'] = "upload error."; 
     $jdata['field'] = "itemImage"; 
     echo json_encode($jdata); 
     exit(); 
    } 
    $data = array('upload_data' => $this->upload->data()); 
    $jdata['message'] = "Thank you for purchasing our item!"; 
    $jdata['result'] = "SUCCESS";     
    echo json_encode($jdata); 
    exit(); 
} 

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

ответ

0

Как вы предлагаете, я считаю, что вы забываете на самом деле делать загрузку, воспламенитель документация кода может помочь:

http://www.codeigniter.com/user_guide/libraries/file_uploading.html

С этим реализовано правильно, я думаю, что ваш код должен выглядеть что-то подобное :

function add_item(){ 
    $this->output->set_status_header(200); 
    $this->output->set_header('Content-Type: application/json'); 
    $itemId   = $this->input->post('itemId'); 
    $itemImage  = $this->input->post('itemImage');; 
    $config['upload_path'] = realpath(APPPATH.'../assets_main/img/item/'); 
    $config['allowed_types'] = 'jpg|jpeg'; 
    $config['max_size'] = '100'; 
    $config['max_width'] = '200'; 
    $config['max_height'] = '200'; 
    $file_name = $config['file_name'] = md5(uniqid(mt_rand())); 
    $config['remove_spaces'] = TRUE; 
    $this->load->library('upload', $config); 


    //THE MISSING LINE 
    if($this->upload->do_upload()){ 
     //THE FILE HAS NOW BEEN UPLOADED 
     $data = array('upload_data' => $this->upload->data()); 
     $jdata['message'] = "Thank you for purchasing our item!"; 
     $jdata['result'] = "SUCCESS";     
     echo json_encode($jdata); 
     exit(); 
    }else{ 
     //NO FILE UPLOADED 
     $jdata['result'] = "FAILED"; 
     $jdata['message'] = "upload error."; 
     $jdata['field'] = "itemImage"; 
     echo json_encode($jdata); 
     exit(); 
    } 


} 
+0

Я пробовал это уже, но это не сработало. Я думаю, может быть, потому что контроллер не смог поймать файл для загрузки. – Dennis

0

Моя первоначальная мысль, использовав CI и пытался это сделать то же самое, что вы не можете сделать загрузку файлов с помощью AJAX без специального плагина, например, как это:

http://malsup.com/jquery/form/

В частности, эта часть загрузки файла:

http://malsup.com/jquery/form/#file-upload

Просто пытаюсь отправить почту с Валом от входа файла не будет работать, я не верю, - хотя, возможно, более современные браузеры способны справиться с этим сейчас.

+0

У вас есть какое-то другое предложение, что я могу с этим сделать? если это действительно не сработает, скорее всего, я собираюсь сделать это снова с обычной загрузкой codeigniter. спасибо за ответ человек. Я ценю это. – Dennis

+0

Вам просто нужно настроить его, как показывает плагин, и сделать php-страницу, чтобы поймать загрузку, похожую на то, что у вас есть. Извините, это все, что я знаю, чтобы сказать. – dgig

+0

Спасибо в любом случае, я просто решил, что если пользователь загрузит изображение, тогда ему нужно щелкнуть submit с помощью img или отправить без img. – Dennis

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