4

私はこれに完全に行き詰まっています...関連するすべてのstackoverflowの投稿をチェックしましたが、何も役に立ちませんでした。Codeigniter で Phil の REST サーバー / クライアントのセットアップを使用すると、通常のエントリを挿入できますが、複数の画像、実際には 1 つの画像であってもアップロードできません。

REST 部分をデバッグする方法がわかりません。何も返されません。

ビューからこの配列が入ってきます:

Array
(
    [1] => Array
        (
            [name] => sideshows.jpg
            [type] => image/jpeg
            [tmp_name] => /Applications/MAMP/tmp/php/phppYycdA
            [error] => 0
            [size] => 967656
        )

    [2] => Array
        (
            [name] => the-beer-scale.jpg
            [type] => image/jpeg
            [tmp_name] => /Applications/MAMP/tmp/php/phpCsiunQ
            [error] => 0
            [size] => 742219
        )

    [3] => Array
        (
            [name] => the-little-lace.jpg
            [type] => image/jpeg
            [tmp_name] => /Applications/MAMP/tmp/php/phpXjT7WL
            [error] => 0
            [size] => 939963
        )

    [4] => Array
        (
            [name] => varrstoen-australia.jpg
            [type] => image/jpeg
            [tmp_name] => /Applications/MAMP/tmp/php/phpcHrJXe
            [error] => 0
            [size] => 2204400
        )

)

複数のファイルのアップロードを整理するために見つけたこのヘルパー メソッドを使用しています。

function multifile_array()
{
    if(count($_FILES) == 0)
        return;

    $files = array();
    $all_files = $_FILES['files']['name'];
    $i = 0;

    foreach ($all_files as $filename) {
        $files[++$i]['name'] = $filename;
        $files[$i]['type'] = current($_FILES['files']['type']);
        next($_FILES['files']['type']);
        $files[$i]['tmp_name'] = current($_FILES['files']['tmp_name']);
        next($_FILES['files']['tmp_name']);
        $files[$i]['error'] = current($_FILES['files']['error']);
        next($_FILES['files']['error']);
        $files[$i]['size'] = current($_FILES['files']['size']);
        next($_FILES['files']['size']);
    }

    $_FILES = $files;

}

この関数は、API コントローラー内で呼び出されています。

public function my_file_upload_post() {

        if( ! $this->post('submit')) {
            $this->response(NULL, 400);
        }

        $data = $this->post('data');
        multifile_array();

        $foldername = './uploads/' . $this->post('property_id');

        if(!file_exists($foldername) && !is_dir($foldername)) {
            mkdir($foldername, 0750, true);
        }

        $config['upload_path'] = $foldername;
        $config['allowed_types'] = 'gif|jpg|png|doc|docx|pdf|xlsx|xls|txt';
        $config['max_size'] = '10240';

        $this->load->library('upload', $config);

        foreach ($data as $file => $file_data) {
            $this->upload->do_upload($file);

            //echo '<pre>';
            //print_r($this->upload->data());
            //echo '</pre>';

      }


        if ( ! $this->upload->do_upload() ) {
            return $this->response(array('error' => strip_tags($this->upload->display_errors())), 404);
        } else {
            $upload = $this->upload->data();
            return $this->response($upload, 200);

        }



    }

コードを共有できてうれしいです。複数のファイルを心配なくアップロードできましたが、外部 Web サイト、内部、または iPhone から呼び出すことができるように API を使用してセットアップしようとしました。助けていただければ幸いです。

乾杯

アップデート:

API コントローラーのコードは次のとおりです。

function upload_post() {

        $foldername = './uploads/' . $this->post('property_id');

        if(!file_exists($foldername) && !is_dir($foldername)) {
            mkdir($foldername, 0750, true);
        }

        $config['upload_path'] = $foldername;
        $config['allowed_types'] = 'gif|jpg|png|doc|docx|pdf|xlsx|xls|txt';
        $config['max_size'] = '10240';

        $this->load->library('upload', $config);        

        if ( ! $this->upload->do_upload())
        {
            //return $this->response(array('error' => strip_tags($this->upload->display_errors())), 404);
            return $this->response(array('error' => var_export($this->post('file'), true)), 404);

        }
        else
        {
            $data = array('upload_data' => $this->upload->data());
            return $this->response(array('error' => $data['upload_data']), 404);
        }
return $this->response(array('success' => 'successfully uploaded' ), 200);      
}

これは、フォームから API に直接アクセスする場合に機能しますが、ブラウザ内でユーザー名とパスワードを入力する必要があります。コントローラー経由でこれを実行すると、画像が見つかりません。

4

1 に答える 1

1

これはまさにあなたが求めたものではありませんが、これは私がこの問題を解決するために使用したものです. PHP/jQuery アップロード ウィジェット!

http://blueimp.github.com/jQuery-File-Upload/

于 2013-01-30T23:01:15.967 に答える