Code snippets for symfony 1.x

Navigation

Refine Tags

Snippets tagged "filename"

keep original filename when using admin generator upload

This is a simple way I came up for keeping original filenames for the files I upload using the admin generator.

We need an extra field in our database schema to store the original filename, lets say our file field it's called "lecture" then our original lecture's filename field would be "original_lecture", our object will be called "Course".

Remember to rebuild your object model before the next step.

Once we have the 2 fields there we need to ignore the second field inside generator.yml, the way to do this is to alter the display parameter and only list the fields you want to edit.

Then we overwrite our actions and add the following code:

class courseActions extends autocourseActions
{
  protected function updateCourseFromRequest()
  {
    $this->course->setOriginalLecture($this->getRequest()->getFileName('course[lecture]'));
    parent::updateCourseFromRequest();
  }
}

This will automatically setup the original filename on the right field.

Now, we move to the frontend, we need an action to download our file so we can alter the request and add our filename on the fly, you can add the following code on any frontend action but for clarity sake I've created a module called "download" that I'll use to download any of my files.

So, inside our download module we add the following action:

class downloadActions extends sfActions
{
  /**
   * Executes lecture action
   *
   */
  public function executeLecture()
  {
    $id = $this->getRequestParameter('id');
    $this->course = CoursePeer::retrieveByPk($id);
    $this->getResponse()->addHttpMeta('Content-Disposition', 'attachment; filename="'.$this->course->getOriginalLecture().'"');
  }
}

As you can see, we added a Content-Disposition header to our request, this header will force to download a file and name it according to our original_lecture field.

Finally, on our view, we need to do 2 things.

1) Disable the layout, this is done under view.yml just add:

lectureSuccess:
  has_layout: off

2) Inside lectureSuccess.php we add:

readfile(sfConfig::get('sf_upload_dir').'/lectures/'.$course->getLecture());

This will output the file name stored in the filesystem, remember to provide the right path, this is just an example :)

Finally, to download the file you just need to follow this link:

http://www.yourhost.com/download/lecture?id=FILEID

That's all, your browser will prompt you with a save file dialog.

by Roberto Carvajal on 2007-06-13, tagged admin  filename  generator  upload 
(1 comment)

keep original filename for backend uploaded files (admin generator)

This is a simple way I came up for keeping original filenames for the files I upload using the admin generator.

We need an extra field in our database schema to store the original filename, lets say our file field it's called "lecture" then our original lecture's filename field would be "original_lecture", our object will be called "Course".

Remember to rebuild your object model before the next step.

Once we have the 2 fields there we need to ignore the second field inside generator.yml, the way to do this is to alter the display parameter and only list the fields you want to edit.

Then we overwrite our actions and add the following code:

class courseActions extends autocourseActions
{
  protected function updateCourseFromRequest()
  {
    $this->course->setOriginalLecture($this->getRequest()->getFileName('course[lecture]'));
    parent::updateCourseFromRequest();
  }
}

This will automatically setup the original filename on the right field.

Now, we move to the frontend, we need an action to download our file so we can alter the request and add our filename on the fly, you can add the following code on any frontend action but for clarity sake I've created a module called "download" that I'll use to download any of my files.

So, inside our download module we add the following action:

class downloadActions extends sfActions
{
  /**
   * Executes lecture action
   *
   */
  public function executeLecture()
  {
    $id = $this->getRequestParameter('id');
    $this->course = CoursePeer::retrieveByPk($id);
    $this->getResponse()->addHttpMeta('Content-Disposition', 'attachment; filename="'.$this->course->getOriginalLecture().'"');
  }
}

As you can see, we added a Content-Disposition header to our request, this header will force to download a file and name it according to our original_lecture field.

Finally, on our view, we need to do 2 things.

1) Disable the layout, this is done under view.yml just add:

lectureSuccess:
  has_layout: off

2) Inside lectureSuccess.php we add:

<?php
 
readfile(sfConfig::get('sf_upload_dir').'/lectures/'.$course->getLecture());
 
?>

This will output the file name stored in the filesystem, remember to provide the right path, this is just an example :)

Finally, to download the file you just need to follow this link:

http://www.yourhost.com/download/lecture?id=FILEID

That's all, your browser will prompt you with a save file dialog.

by whoknows on 2007-06-13, tagged admin  filename  generator  upload