zend framework - Zend Zend_File_Transfer_Adapter_Http pregunta de cambio de nombre
zend-framework zend-file (6)
De acuerdo con la documentación, no debes poner la ruta en el destino
Tengo una pregunta sobre el cambio de nombre de un archivo después de que se cargó en Zend. No sé dónde poner el filtro Cambiar nombre. Esto es lo que tengo. Intenté mover las cosas, pero estoy perdido. Actualmente carga el archivo a mi carpeta de fotos, pero no lo cambia de nombre. ¡Gracias por cualquier ayuda!
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'';
}
}
}
Tuve que interceptar $ _FILES y hacer el cambio antes de hacer la llamada al adaptador
if(isset($_FILES[''file1''])){
$ext = pathinfo($_FILES[''file1''][''name'']);
$_FILES[''file1''][''name''] = ''image_''. $userid .''.''.$ext[''extension''];
}
$adapter = new Zend_File_Transfer_Adapter_Http();
Estoy seguro de que hay una mejor manera y no sé por qué el filtro no funciona. He intentado todo para que funcione. Tenía una fecha límite y el código anterior fue producción jaja
Espero que ayude a alguien
Eric
Logré hacer eso al establecer un filtro. Tenga en cuenta que no establecí una ruta de destino.
$adapter= new Zend_File_Transfer_Adapter_Http();
$adapter->addFilter(''Rename'',array(''target'' => WWW_ROOT . ''/photos/'' . $this->memberId . ''.jpg''));
$adapter->receive();
hay una manera mejor y más segura con Zend Framework ...
crear clase de ayuda para recuperar la extensión de archivo. .
clase 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;
}
}
}
en el controlador:
class ProfileController extends Zend_Controller_Action {function indexAction () {$ this-> view-> title = "Profile"; $ this-> view-> bodyCopy = "
Por favor, llene esta forma.
"; $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;
}
cuando tu formulario debe ser:
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));
}
}
Que te diviertas
En realidad, hay una manera aún más fácil de hacer esto. Todo lo que necesita hacer es pasar falso como el segundo parámetro para el método getFileName del objeto Zend_File_Transfer_Adapter_Http. Luego puede cambiar el nombre del archivo adjuntando un ID de usuario o analizar el nombre del archivo para obtener la extensión si así lo desea.
// 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
public function getExtension($name){
$names= explode(".", $name);
return $names[count($names)-1];
}