2012-03-12 57 views
0

我使用sfWidgetFormInputFile()將文件上傳到文件夾MY_PROJECT/WEB/UPLOADS。如何從該路徑下載這些文件。如何獲取上傳文件夾的路徑。而且當我上傳文件的文件名更改爲這樣的東西1f3c6d9bf7b8ebda8b600576c55817c34715a8421。我怎樣才能上傳它的原名?提前致謝。如何在symfony1.4下載上傳的文件

+0

你用什麼函數將文件保存在文件系統中? – 2012-03-12 14:14:05

回答

2

還有一個更簡單的方法...把generateFieldNameFilename()功能到您的模型或窗體類(其中FieldName是該領域的駱駝名稱你在哪裏存儲圖像)。

// 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

你需要得到原始文件名,因爲這樣的:

$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); 
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; 
}