2014-03-19 27 views
0

我試圖用 'filerenameupload' 過濾器\ Zend的\文件\傳輸\適配器\ HTTP(): Zend的文件傳輸適配器 HTTP()和filerenameupload

$adapter = new \Zend\File\Transfer\Adapter\Http(); 

    $adapter->addFilter('filerenameupload', array(
     'target' => BASE_DIR . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR . 
     'img' . DIRECTORY_SEPARATOR . 'gallery' . 
     DIRECTORY_SEPARATOR . 'image.jpg', 
     'randomize' => true, 
    )); 

    var_dump($adapter->isValid()); // true 

    if (!$adapter->receive()) { 
     $messages = $adapter->getMessages(); 
     echo implode("\n", $messages); 
    } 

始終有錯誤,

文件'/tmp/somefile.png'無法重命名。處理文件時發生錯誤。

/tmp/somefile.png - 存在,是可讀可寫的,腹脹的文件夾也可讀可寫的

錯誤來源於類RenameUpload:

protected function moveUploadedFile($sourceFile, $targetFile) 
{ 
    ErrorHandler::start(); 
    $result = move_uploaded_file($sourceFile, $targetFile); 
    $warningException = ErrorHandler::stop(); 
    if (!$result || null !== $warningException) { 
     throw new Exception\RuntimeException(
     sprintf("File '%s' could not be renamed. An error occurred while processing the file.", $sourceFile), 0, $warningException 
     ); 
    } 

    return $result; 
} 

所以也許有人有一個例子或知道如何解決這個錯誤?或者我做錯了什麼?

回答

1

感謝來自#zftalk討教@hemangpatel,因此工作動作的樣子:

public function uploadAction() 
{ 
    $adapter = new \Zend\File\Transfer\Adapter\Http(); 

    $adapter->setDestination(BASE_DIR . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR . 
      'img' . DIRECTORY_SEPARATOR . 'gallery' . DIRECTORY_SEPARATOR); 
    // Returns all known internal file information 

    $adapter->addFilter('File\Rename', array('target' => $adapter->getDestination() . 
     DIRECTORY_SEPARATOR . rand(2, 10) . '.jpeg', 
     'overwrite' => true)); 

    if (!$adapter->receive()) { 
     $messages = $adapter->getMessages(); 
     return new ViewModel(['messages' => $messages]); 
    } else { 
     $this->flashMessenger()->addSuccessMessage('Upload success'); 

     $this->redirect()->toRoute('admin', ['controller' => 'gallery', 
      'action' => 'index']); 
    } 
}