9

私はcakephpが初めてで、cakephp 2.3で簡単なファイルアップロードを作成しようとしています。ここに私のコントローラーがあります

public function add() {
    if ($this->request->is('post')) {
        $this->Post->create();
           $filename = WWW_ROOT. DS . 'documents'.DS.$this->data['posts']['doc_file']['name']; 
           move_uploaded_file($this->data['posts']['doc_file']['tmp_name'],$filename);  


        if ($this->Post->save($this->request->data)) {
            $this->Session->setFlash('Your post has been saved.');
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash('Unable to add your post.');
        }
     }
 }

そして私のadd.ctp

echo $this->Form->create('Post');
echo $this->Form->input('firstname');
echo $this->Form->input('lastname');
echo $this->Form->input('keywords');
echo $this->Form->create('Post', array( 'type' => 'file'));
echo $this->Form->input('doc_file',array( 'type' => 'file'));
echo $this->Form->end('Submit')

名、姓、キーワード、およびファイルの名前を DB に保存しますが、app/webroot/documents に保存したいファイルが保存されません。誰か助けてもらえますか? ありがとう

アップデート

thaJeztah私はあなたが言ったようにやったが、私が間違っていなければ、いくつかのエラーが発生する

public function add() {
     if ($this->request->is('post')) {
         $this->Post->create();
            $filename = WWW_ROOT. DS . 'documents'.DS.$this->request->data['Post']['doc_file']['name']; 
           move_uploaded_file($this->data['posts']['doc_file']['tmp_name'],$filename);



         if ($this->Post->save($this->request->data)) {
             $this->Session->setFlash('Your post has been saved.');
             $this->redirect(array('action' => 'index'));
         } else {
            $this->Session->setFlash('Unable to add your post.');
         }
     }

 }

そして私のadd.ctp

 echo $this->Form->create('Post', array( 'type' => 'file'));
 echo $this->Form->input('firstname'); echo $this->Form->input('lastname');
 echo $this->Form->input('keywords');
 echo $this->Form->input('doc_file',array( 'type' => 'file'));
 echo $this->Form->end('Submit') 

エラーは

注(8): 配列から文字列への変換 [CORE\Cake\Model\Datasource\DboSource.php、1005 行目]

データベース エラー エラー: SQLSTATE[42S22]: 列が見つかりません: 1054 不明な列 'フィールド リスト' の列 '配列'

SQL クエリ: INSERT INTO first.posts (名、姓、キーワード、doc_file) 値 ('dfg'、'cbhcfb'、'dfdbd'、配列)

と Victor 私もあなたのバージョンをやった、それも動作しません。

4

4 に答える 4

3

誰かが再びそれを探している場合に備えて。これが私のコードです(Cakephp 2.5.5でテストおよび使用されています)。これは、 http ://www.templemantwells.com.au/article/website-development/cakephp-image-uploading-with-databaseおよびhttp://book.cakephp.org/2.0/en/core-libraries/に基づいています。 helpers/form.html#FormHelper::ファイル

ファイルを表示 (*.ctp)

    <?php 
    echo $this->Form->create('Image', array('type' => 'file'));
?>


    <fieldset>
        <legend><?php echo __('Add Image'); ?></legend>
    <?php


        echo $this->Form->input('Image.submittedfile', array(
            'between' => '<br />',
            'type' => 'file',
            'label' => false
        ));
        // echo $this->Form->file('Image.submittedfile');

    ?>
    </fieldset>
<?php echo $this->Form->end(__('Send My Image')); ?>

コントローラー機能 (*.php)

    public function uploadPromotion() {

    // Custom
    $folderToSaveFiles = WWW_ROOT . 'img/YOUR_IMAGE_FOLDER/' ;




    if (!$this->request->is('post')) return;        // Not a POST data!


    if(!empty($this->request->data))
    {
        //Check if image has been uploaded
        if(!empty($this->request->data['Image']['submittedfile']))
        {
                $file = $this->request->data['Image']['submittedfile']; //put the data into a var for easy use

                debug( $file );

                $ext = substr(strtolower(strrchr($file['name'], '.')), 1); //get the extension
                $arr_ext = array('jpg', 'jpeg', 'gif'); //set allowed extensions

                //only process if the extension is valid
                if(in_array($ext, $arr_ext))
                {


                    //do the actual uploading of the file. First arg is the tmp name, second arg is 
                    //where we are putting it
                    $newFilename = $file['name']; // edit/add here as you like your new filename to be.
                    $result = move_uploaded_file( $file['tmp_name'], $folderToSaveFiles . $newFilename );

                    debug( $result );

                    //prepare the filename for database entry (optional)
                    //$this->data['Image']['image'] = $file['name'];
                }
        }

        //now do the save (optional)
        //if($this->Image->save($this->data)) {...} else {...}
    }




}
于 2014-11-17T16:40:09.200 に答える
2

..ドキュメント ディレクトリが既に存在することを確認し、書き込み権限があることを確認しますか? 存在しない場合は作成するか、コードで存在するかどうかを確認し、存在しない場合は作成します。ディレクトリが存在するかどうかを確認して作成し、ファイルをアップロードするコードの例-

$dir = WWW_ROOT. DS . 'documents';
 if(file_exists($dir) && is_dir($dir))
 {
    move_uploaded_file($this->data['posts']['doc_file']['tmp_name'],$filename);  
 }
 elseif(mkdir($dir,0777))
 {
  move_uploaded_file($this->data['posts']['doc_file']['tmp_name'],$filename);  
  }

また、空白/空のファイルをアップロードしていないことを確認してください - 失敗する可能性があります。

于 2013-04-29T06:41:37.493 に答える