5

サード パーティのエンドポイントにファイルをアップロードしようとしていますが、API にはエンド ユーザーに公開できない api_key が必要なため、フォームから直接ファイルを投稿できません。したがって、私の計画は、フォームをコントローラー/アクションに向け、そこからデータを投稿することでした。ただし、debug($this->request->data)コントローラー内から見ると、ファイルデータが欠落しています。

ビュー上のフォーム:

echo $this->Form->create('Media', array('type'=>"file", 'url'=>array('controller'=>'media', 'action'=>'upload') ) );
echo $this->Form->input('name', array("name"=>"name") );
echo $this->Form->input('file', array('type'=>'file', "name"=>"file") );
echo $this->Form->input('project_id', array('type'=>'hidden', "name"=>"project_id", "value"=>$project["Project"]['hashed_id']) );
//THIS CANNOT BE HERE: echo $this->Form->input('api_password', array('type'=>'hidden', "name"=>"api_password", "value"=>'xxxxxxx') );
echo $this->Form->end("Submit");

debug()コントローラーからデータを要求すると、次のようになります。

array(
    'name' => 'Some Name',
    'project_id' => 'dylh360omu',
)

何が起きてる?

4

2 に答える 2

7

CakeRequest::$dataファイルアップロードデータは、入力要素名が名前付きの配列で渡された場合にのみ見つけることができますdata(これは、特定の名前を手動で定義しない場合のデフォルトです)。

<input type='file' name='data[file]'>

ただし、あなたの場合、要素は次のようになります。

<input type='file' name='file'>

これにより、ファイルのデータが に入れられCakeRequest::$params[form]ます。

https://github.com/cakephp/cakephp/blob/2.4.0/lib/Cake/Network/CakeRequest.php#L346

したがって、それに応じてフォームの名前を変更します。

$this->Form->input('file', array('type' => 'file', 'name' => 'data[file]'));

または、次の方法でファイル データにアクセスしますCakeRequest::$params[form]

debug($this->request->params['form']);
于 2013-07-12T21:53:36.720 に答える
0

Nunser は正しかった (いつものように)! この問題は、入力の名前をカスタマイズしたことが原因でした。'name'=>'...'オプション配列からを削除すると、ファイルは期待どおりに表示されます。これはバグのように思えますが、誰かがより良い説明を持っているなら、私はそれを聞きたいです.

于 2013-07-25T17:22:52.010 に答える