将文件从android okhttp上传到codeigniter

时间:2016-06-21 13:01:08

标签: php android codeigniter file-upload okhttp3

如上所述,我试图将文件从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 ;
        }
    }

我做错了什么? 谢谢!

2 个答案:

答案 0 :(得分:0)

我很确定CodeIgniter要求您将$config['allowed_types']设置为库初始化的一部分。默认安装没有设置允许的类型'因此,您必须按照docs在控制器或配置文件中明确设置它。

在初始化库之前,您需要添加$config['allowed_types'] = 'gif|jpg|png';之类的内容。

那就是说,这可能不是你唯一的问题。

答案 1 :(得分:0)

您可以在服务器代码中执行print_r($_FILES);吗?查看文件数据是否在该变量中发送?

消息'您没有选择要上传的文件'仅当$ _FILES中没有发送文件时,才会显示CodeIgniter的上传库。

您还应该尝试回显print_r($_POST);以确定您的文件数据是来自$ _POST还是$ _FILES。