如何在symfony1.4中下载上传的文件

时间:2012-03-12 05:38:08

标签: symfony1 symfony-1.4

我使用sfWidgetFormInputFile()将图像上传到文件夹MY_PROJECT/WEB/UPLOADS。如何从该路径下载这些文件。如何获取uploads文件夹的路径。而且,当我上传文件时,文件名会更改为像1f3c6d9bf7b8ebda8b600576c55817c34715a8421这样的内容。如何使用其原始名称上传?提前致谢。

3 个答案:

答案 0 :(得分:2)

您需要获取原始文件名,如下:

   $filename = $this->form->getValue('file')->getOriginalName();
   $this->exists = file_exists(sfConfig::get('sf_web_dir').$filename);

   if (!$this->exists)
     $this->form->getValue('file')->save(sfConfig::get('sf_web_dir').$filename);

答案 1 :(得分:2)

有一种更简单的方法...将generateFieldNameFilename()函数放入模型或表单类中(其中FieldName是存储图像的字段的camelized名称)。

// your form or model class
public function generateImageFilename(sfValidatedFile $file)
{
  return $file->getOriginalName();
}

// in your template ($model => model object)
<?php echo link_to($model->getImage(), '/uploads/'.$model->getImage(), array('target' => '_blank')); ?>
// to dispaly the image in the link
<?php echo link_to(image_tag('/uploads/'.$model->getImage()), '/uploads/'.$model->getImage(), array('target' => '_blank')); ?>

这将在新标签页中打开您的图片。如果您想在上传文件中强行下载图片目录,请将.htaccess文件放入其中(必须启用标题模块sudo a2enmod headers):

SetEnvIf Request_URI "\.jpg$" requested_jpg=jpg
Header add Content-Disposition "attachment" env=requested_jpg

顺便说一句symfony重命名你上传的文件,因为文件名在目录中必须是唯一的,所以如果你想保留原始名称,你存储文件名的字段应该是唯一的,每个模型都应该有一个单独的文件子目录

答案 2 :(得分:0)

public function executeDownload(sfwebRequest $request)
{
    $blog_user = Doctrine_Core::getTable('login')->find($request->getParameter('id'));
    //$this->forward404Unless($res);
    //$file=$blog_user->getDoc();
    //$path=sfConfig::get('sf_upload_dir').'/'.$file;
    header('content-type:image/jpg');
    header('Content-Description: File Transfer');
    //header('Content-Type: application/octet-stream');
    header('Accept-Ranges: bytes');
    header('Content-Disposition: attachment; filename='.basename($blog_user->getDoc()));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($blog_user->getDoc()));
    ob_clean();
    flush();
    readfile($blog_user->getDoc());
    return sfView::NONE;
}