2012-03-12 5 views
0

sfWidgetFormInputFile()を使用して、MY_PROJECT/WEB/UPLOADSというフォルダに画像をアップロードしています。そのパスからこれらのファイルをダウンロードするにはどうすればいいですか?アップロードフォルダのパスを取得する方法。また、ファイルをアップロードすると、ファイル名が1f3c6d9bf7b8ebda8b600576c55817c34715a8421のように変わってしまいます。どのように元の名前でアップロードできますか?前もって感謝します。symfony1.4でアップロードしたファイルをダウンロードする方法

+0

ファイルシステムにファイルを保存するにはどのような機能を使用しますか? –

答えて

2

もっと簡単な方法があります... FieldNameは、フィールドのラクダ名前です(お使いのモデルやフォームクラスにgenerateFieldNameFilename()機能を置きますどこに画像を保存するか)。

// 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')); ?> 

これで画像が新しいタブで開きます。

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

symfonyはあなたのアップロードしたファイルの名前を変更ちなみにファイル名は、ディレクトリ内で一意である必要がありますので:あなたは(ヘッダモジュールがsudo a2enmod headersを有効にする必要があります)、それに.htaccessファイルを入れて、アップロードのディレクトリにダウンロード画像を強制したい場合元の名前を保持したい場合は、ファイル名を格納するフィールドは一意でなければならず、すべてのモデルにファイルの別々のサブディレクトリが必要です。

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; 
} 
関連する問題