0

ファイルを webroot/files ディレクトリにアップロードしようとしています。また、データベース テーブルにファイルのレコードを含めます。

データベースへのファイルの保存は機能し、move_uploaded_file() メソッドを使用しますが、機能しません。エラーは返されませんが、ファイルはファイル フォルダーに表示されません。パーミッションを確認したところ、すべて 755 です。コントローラーのアクションは次のとおりです。

if ($this->request->is('post'))
  {
      $uploadedFile = array();
      $filename = $this->request->data['Document']['MyFile']['name'];
      $fileData = fread(fopen($this->request->data['Document']['MyFile']['tmp_name'], "r"), $this->request->data['Document']['MyFile']['size']);

      $uploadedFile['MyFile']['name'] = $this->request->data['Document']['MyFile']['name'];
      $uploadedFile['MyFile']['type'] = $this->request->data['Document']['MyFile']['type'];
      $uploadedFile['MyFile']['size'] = $this->request->data['Document']['MyFile']['size'];
      $uploadedFile['MyFile']['data'] = $fileData;

  $filePath = WEBROOT_DIR . DS . 'files' . DS . $uploadedFile['MyFile']['name'];
 debug($filePath);
      if (move_uploaded_file($filename, $filePath))
      {
          echo "No Error";
          $this->Session->setFlash('Uploaded file has been moved SUCCESS.');
      }
      else
      {
          $this->Session->setFlash('Unable to Move file.');
      }
      if ($this->MyFile->save($uploadedFile))
      {
          $this->Session->setFlash('Uploaded file has been saved.');
      }
      else
      {
          $this->Session->setFlash('Unable to save file.');
      }
  }

これはdebug($filePath); 「webroot/files/filename」からの出力です -> filename はアップロードされたファイルの実際の名前です。

どんな助けでも素晴らしいでしょう。ありがとう

アップデート------------------------------------------------ 私は$this->request->data をデバッグしました。これは、小さなファイルをアップロードしたときの出力です。

array(
    'Document' => array(
        'MyFile' => array(
            'name' => 'add.ctp',
            'type' => 'application/octet-stream',
            'tmp_name' => '/tmp/phpcxBA9B',
            'error' => (int) 0,
            'size' => (int) 3700
        )
    )
)

下にelseステートメントも追加しましたがmove_uploaded_file()、フラッシュがファイルを移動できませんに設定されています。

理由はまだわかりませんが、$filename$filePath変数でしょうか?

ありがとう

4

3 に答える 3

1

WWW_ROOT代わりに定数を使用してみましたWEBROOT_DIRか?ファイルシステムへのパスを指定する必要があります。

于 2012-08-06T19:51:20.897 に答える
1

あなたはこれで問題に直面するかもしれません:

$filePath = WEBROOT_DIR . DS . 'files' . DS . $uploadedFile['MyFile']['name'];

エラー メッセージは次のようになります。

move_uploaded_file(webroot\files\File_Name): failed to open stream: No such file or directory [APP\Controller\CustomerController.php cakephp

その場合は、上記の行を次のように置き換えます。

$filePath = WWW_ROOT . DS . 'files' . DS . $uploadedFile['MyFile']['name'];

意味、

WEBROOT_DIR . DS . 

WWW_ROOT .

アップロードされたファイルを移動します。

于 2013-09-19T18:47:11.513 に答える
1

「tmp_name」を移動する必要があります。

$filename = $this->request->data['Document']['MyFile']['tmp_name'];
于 2012-08-10T12:13:11.047 に答える