2016-06-21 1 views
2

Как описано выше, я пытаюсь загрузить файл с okhttp3 на сервер.Загрузка файла с android okhttp в codeigniter

Я всегда получаю «Вы не выбрали файл для загрузки» в моем подходе из части CodeIgniter.

Вот мой код

Android:

 

    public void sendItem(File item) { 
     Response response = null; 
     MediaType mediaType = MediaType.parse(FileUtils.getMimeType(item)); 
     try { 
      RequestBody formBody = new MultipartBody.Builder().addFormDataPart("item", item.getName(), RequestBody.create(mediaType, item)).build(); 

      Request request = new Request.Builder().url("index.php").post(formBody).build(); 

      response = client.newCall(request).execute(); 
      int statusCode = response.code(); // always 500 

     } catch (IOException e) { 
      e.printStackTrace(); 

     } finally { 
      if (response != null) 
       response.close(); 
     } 
    } 

код сервера:

 

    function upload(){ 
     $config['upload_path'] = '.../assets/...'; 
     $this->load->library('upload', $config); 
     $this->upload->initialize($config); 

     $media = 'item'; 
     if (!$this->upload->do_upload($media)) { 
      $error = array('error' => $this->upload->display_errors()); 
      print_r($error); 
     }else{ 
      $stuff = $this->upload->data(); 
      return $stuff ; 
     } 
    } 

Что я делаю неправильно? Спасибо!

+0

Что у вас в '$ media'? – Kristiyan

+0

библиотека загрузки codeigniter работает только на php версии 5.6 и выше, поэтому убедитесь, что это правильно. –

ответ

0

Я уверен, что CodeIgniter требует, чтобы вы установили $config['allowed_types'] как часть инициализации библиотеки. Установка по умолчанию не устанавливает «разрешенные типы», поэтому вы должны явно указать ее в своем контроллере или в файле конфигурации на documentation.

Перед тем, как инициализировать библиотеку, вам нужно добавить что-то вроде $config['allowed_types'] = 'gif|jpg|png';.

Это, возможно, не единственная проблема.

+0

allowed_types не является обязательным, его можно разместить, если вы хотите ограничить определенные расширения. – openrijal

+1

Не согласен. Вы можете создать глобальный файл конфигурации для загрузки файлов и установить $ config ['allowed_types'] = "*"; Или вы можете установить его в контроллере до инициализации. Если вы не установите его вообще, библиотека откажется работать. Документация для этой библиотеки довольно плохая. – Wade

+0

Я полностью пропустил глобальную конфигурационную часть, вы здесь правильно @Wade – openrijal

0

Можете ли вы сделать print_r($_FILES); в своем сервере код & посмотреть, будут ли данные файла отправляться в этой переменной?

Сообщение «Вы не выбрали файл для загрузки» отображается в библиотеке загрузки CodeIgniter только в том случае, если файл не был отправлен в $ _FILES.

И вы также должны попробовать эхом ответить print_r($_POST);, чтобы узнать, поступают ли ваши данные в $ _POST или $ _FILES.

+0

, это совсем не ответ. – Fringo

+0

Несомненно, это может быть не ответ. Но do_upload() библиотеки загрузки CodeIgniter просматривает массив $ _FILES для переменной item, поэтому он будет искать элемент $ _FILES ['item']. Если вы этого не достигнете, это сообщение придет. – tovishalck