Zend Zend_File_Transfer_Adapter_Http renaming ques

2020-06-22 02:29发布

I've got a question about renaming a file after it's been uploaded in Zend. I don't know where to put the Rename Filter. Here's what I've got. I've tried moving things around, but I'm lost. Currently it does upload the file to my photos folder, but it doesn't rename it. Thanks for any help!

if($this->_request->isPost()) 
{
    $formData = $this->_request->getPost();

    if ($form->isValid($formData)) 
    {
        $adapter = new Zend_File_Transfer_Adapter_Http();
        $adapter->setDestination(WWW_ROOT . '/photos');

        $photo = $adapter->getFileInfo('Photo');

        $adapter->addFilter('Rename', array(
            $photo['Photo']['tmp_name'], 
            WWW_ROOT . '/photos/' . $this->memberId . '.jpg', 
            true
        )); 

        if ($adapter->receive()) 
        {
            echo 'renamed';
        }
    }
}

6条回答
Animai°情兽
2楼-- · 2020-06-22 03:01

I had to intercept the $_FILES and make the change before making the call to the adapter

if(isset($_FILES['file1'])){
  $ext = pathinfo($_FILES['file1']['name']);
  $_FILES['file1']['name'] = 'image_'. $userid .'.'.$ext['extension'];
}
$adapter = new Zend_File_Transfer_Adapter_Http();

Im sure there is a better way and I dont know why the filter doesn't work I have tried everything to get it to work. I had a deadline and so the above code went production LOL

Hope it helps someone

Eric

查看更多
在下西门庆
3楼-- · 2020-06-22 03:10

I managed to do that by setting a filter. Note that I did not set a destination path.

$adapter= new Zend_File_Transfer_Adapter_Http();
$adapter->addFilter('Rename',array('target' => WWW_ROOT . '/photos/' . $this->memberId . '.jpg'));

$adapter->receive();
查看更多
Luminary・发光体
4楼-- · 2020-06-22 03:14
public function getExtension($name){
    $names= explode(".", $name);
    return $names[count($names)-1];
}
查看更多
爷、活的狠高调
5楼-- · 2020-06-22 03:18

According to the documentation, you should not put the path in the destination

link text

查看更多
我欲成王,谁敢阻挡
6楼-- · 2020-06-22 03:20

there is a better and more secure way with zend framework ...

create helper class to retrieve file extension . .

class ImageUpload {

public function getExtension ($name)
{
    if($name){
    foreach ($name as $val){
        $fname=$val['name'];
      }
    $exts = split("[/\\.]", $fname) ;
    $n = count($exts)-1;
    $exts = $exts[$n];
    return $exts; 
    }

}

}

in controller :

class ProfileController extends Zend_Controller_Action { function indexAction() { $this->view->title = "Profile"; $this->view->bodyCopy = "

Please fill out this form.

";

    $form = new ImgForm();

    if ($this->_request->isPost()) {
        $formData = $this->_request->getPost();
        if ($form->isValid($formData)) {
                $adapter = new Zend_File_Transfer_Adapter_Http();
                $adapter->setDestination('images/users/big');

                // getting extension

                $filename = $adapter->getFileInfo();
                $uhelper = new ImageUpload;  // cals for help to get file extension
                $extension = $uhelper->getExtension($filename); // got extension   


                 // success -- file handled

                 //rename
                 $auth = Zend_Auth::getInstance();
                 $identity = $auth->getIdentity();

                 $adapter->addFilter('Rename', array('target' => 'images/users/big/'.$identity->id.'.'.$extension,
                     'overwrite' => true));

                if (!$adapter->receive()) {
                 $form->addError($adapter->getMessages());

                }

        } else {
            $form->populate($formData);
        }
    }

    $this->view->form = $form;

}

when your form should be :

    parent::__construct($options);
    $this->setName('upload');
    $this->setAttrib('enctype', 'multipart/form-data');


    $file = new Zend_Form_Element_File('file');
    $file->setLabel('File')
          ->addValidator('Count', false, 1)     // ensure only 1 file
          ->addValidator('Size', false, 102400) // limit to 100K
          ->addValidator('Extension' ,false, 'jpg,png,gif') // only JPEG, PNG, and GIFs

          ->setRequired(true);          


    $submit = new Zend_Form_Element_Submit('submit');
    $submit->setLabel('Upload');

    $this->addElements(array($file, $submit));

}

}

Have fun

查看更多
迷人小祖宗
7楼-- · 2020-06-22 03:21

Actually, there is an even easier way to do this. All you need to do is pass false as the second parameter for the getFileName method of the Zend_File_Transfer_Adapter_Http object. Then you can rename the file by appending a userID to it or parse the file name to get the extension out if you like as well.

// upload a file called myimage.jpg from the formfield named "image".

$uploaded_file = new Zend_File_Transfer_Adapter_Http();
$uploaded_file->setDestination('/your/path/');
    try {
        // upload the file
        $uploaded_file->receive();
    } catch (Zend_File_Transfer_Exception $e) {
        $e->getMessage();
    }
$file_name = $uploaded_file->getFileName('image', false);
// this outputs "myimage.jpg"

$file_path = $uploaded_file->getFileName('image');
// this outputs "/your/path/myimage.jpg"

// now use the above information to rename the file
查看更多
登录 后发表回答