2016-06-21 63 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); &看看是否在該變量中發送文件數據?

僅當沒有文件在$ _FILES中發送時,纔會從CodeIgniter的上傳庫中顯示'您沒有選擇要上傳的文件'的消息。

而且您還應該嘗試回顯print_r($_POST);以確定您的文件數據是在$ _POST還是在$ _FILES中。

+0

這不是一個答案。 – Fringo

+0

當然,這可能不是答案。但CodeIgniter上傳庫的do_upload()在$ _FILES數組中查找'item'變量,所以它會查找$ _FILES ['item']元素。除非你明白,否則這條信息即將到來。 – tovishalck