开发者

Zend move_uploaded_file Failure

开发者 https://www.devze.com 2023-02-16 20:28 出处:网络
I have spent a couple hours trying to add a simple upload file option to my Zend application.I have double checked all of the necessary permissions and everything works fine.Quite simply, I have it up

I have spent a couple hours trying to add a simple upload file option to my Zend application. I have double checked all of the necessary permissions and everything works fine. Quite simply, I have it uploading nicely to a temporary folder but once I have it in that temp folder, I can't get it to move to its permanent storage location. Below is the code that keeps failing...

To be precise, the code fails with the $uploaded die statement. I thought it might be an issue since I am sending it to the Model rather than handling it right in the Action but that didn't solve the problem either. Can anyone point me in the right direction? I just can't get the file out of the temprorary directly and into the permenant storage locatoin I want.

Thank you!

//This is the action that is called when form is submitted.

function addImageAction()
{
    $imgForm = new Admin_Form_ImageUploadForm();
    $imgForm->setAction('/admin/media/add-image');
    $imgForm->setMethod('post');
    $this->view->form = $imgForm;

    if($this->getRequest()->isPost())
    {

        if(!$imgForm->image->receive())
        {
            $this->view->message = '<div class="popup-warning">Errors Receiving File.</div>';
            $this->_redirect('/admin/media/add开发者_如何学Python-image');
        }

        if($imgForm->image->isUploaded())
        {
            $imageModel = new Admin_Model_Image();
            $imageId = $imageModel->addImage($imgForm->image->getFileName());
            $this->_redirect('/admin/media/view-image/'.$imageId);              
        }

    }

}

Block #2 - The Model

    public function addImage($image)
{
    // Process the New File
    // Check to see if Filename is already in Database
    $select = $this->select();
    $select->where('filename=?', $image);
    $row = $this->fetchRow($select);
    if ($row)
    {
        die("Filename already exists in Database.  Please try another file.");
    }


    // Move file to Storage Directory
        // Check/Create Storage Directoy (YYYYMMDD)

        // Temporarily set MEDIA_DIR
        $mediaDir = APPLICATION_PATH . '/../public/media/uploads/';
        $destinationDir = $mediaDir . date('Ymd');

        if (!is_dir($destinationDir)){
            $storageDir = mkdir($destinationDir);
        }

        // Save Image
        $uploaded = is_uploaded_file($image);
        if (!$uploaded) {
            die("Image has not been uploaded");
        }
        $image_saved = move_uploaded_file($image, $destinationDir);

        if(!$image_saved)
        {
            die("Image could not be moved");
        }

    // Create Alternative Sizes

    // Save Data to Database Tables
    $dateObject = new Zend_Date();

    $row = $this->createRow();  
    $row->filename      = $image;
    $row->date_added    = $dateObject->get(Zend_Date::TIMESTAMP);
    $row->date_modified = $dateObject->get(Zend_Date::TIMESTAMP);
    $row->save();

    // Fetch the ID of the newly created row
    $id = $this->_db->lastInsertId();

    // Retrieve IPTC Data

    // Retrieve EXIF Data

    // Return Image ID  
    return $id;
}


receive() method moves the file using move_uploaded_file(). So the file you work with is not uploaded anymore, it's normal file. You should use standard copy() function instead.

0

精彩评论

暂无评论...
验证码 换一张
取 消