Загрузка файла с android okhttp на codeigniter

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

Я всегда получаю «Вы не выбрали файл для загрузки» в моем подходе из части 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 ;
        }
    }

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


person Fringo    schedule 21.06.2016    source источник
comment
Что у вас в $media?   -  person Kristiyan    schedule 21.06.2016
comment
Библиотека загрузки codeigniter работает только на php версии 5.6 и выше, поэтому убедитесь, что это правильно.   -  person Jude Fernandes    schedule 06.07.2017


Ответы (2)


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

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

Тем не менее, это может быть не единственная ваша проблема.

person Wade    schedule 28.06.2016
comment
allowed_types не является обязательным, его можно разместить, если вы хотите ограничиться определенными расширениями. - person openrijal; 04.07.2016
comment
Не согласен. Вы можете создать глобальный файл конфигурации для загрузки файлов и установить $ config ['allowed_types'] = *; Или вы можете установить его в контроллере перед инициализацией. Если вы не установите его вообще, библиотека откажется работать. Документация к этой библиотеке очень плохая. - person Wade; 05.07.2016
comment
Я полностью пропустил часть глобальной конфигурации, вы правы здесь @Wade - person openrijal; 05.07.2016

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

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

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

person tovishalck    schedule 01.07.2016
comment
это вообще не ответ. - person Fringo; 01.07.2016
comment
Конечно, это может быть не ответ. Но do_upload () библиотеки загрузки CodeIgniter ищет в массиве $ _FILES переменную 'item', поэтому она будет искать элемент $ _FILES ['item']. Если вы этого не понимаете, это сообщение придет. - person tovishalck; 01.07.2016