Как загрузить файл при нажатии на путь к файлу с помощью PHP-Symfony?

Я создаю сайт, используя symfony для ведения блога. Пользователи могут загружать свои сообщения на сайт. когда пользователь добавит файл, он сохранит внутри web/upload/file_upload и путь к файлу будет сохранен в таблице add_post . Когда администратор просматривает add_post таблицы add_post он может видеть путь к загруженному файлу каждого пользователя, что я хочу сделать, это через этот путь к файлу загрузить файл.

Как я могу это сделать?

изменить 1:

Модель – модуль Blog_user – сообщение

Table Structre – имя таблицы – Blog_user

  1 user_id bigint(20) 2 gender varchar(255) 3 blog_status tinyint(1) 4 file varchar(255) 

форма

 'user_id' => new sfWidgetFormInputHidden(), 'gender' => new sfWidgetFormInputText(), 'file' => new sfWidgetFormInputFile(), 

Здесь, когда вы загружаете файл, путь к файлу сохраняется в таблице и файле Blog_user, сохраняя его в каталоге веб-каталога / загрузки.

изменить 2:

// сохранение метода файла

 public function saveFile(){ $file = $this->getValue('file'); if(isset($file)){ $filename = 'POST_Uploaded -' .($file->getOriginalName()); $file->save(sfConfig::get('sf_upload_dir').'/post_upload'.'/'.$filename); } } 

E:\xampp\htdocs\trunk\web\uploads\post_upload\POSt_Uploaded -JS.pdf

Это так, как это было сохранено в каталоге side web / upload / post_upload, и тот же путь сохранит внутри db также

3:

когда пользователь загружает блог, он будет сохранять в таблице blog_user, и он будет содержать блог _id в качестве первичного ключа, user_id – в пользовательской таблице. то, что я хочу сделать, – это когда пользователь загружает файл, как user_id, так и blog_id должны быть сохранены внутри таблицы блога. как это сделать?

user table – user_id, файл (загруженный файл)

blog table – blog_id – есть заголовки блога, каждый заголовок имеет уникальный идентификатор блога, так что пользователь может загружать файл под каждым титром,

post table – post_id, blog_id, user_id

Предполагая, что:

  • имя вашего модуля – имя moduleName
  • модель с файлом – BlogUser
  • первичный ключ модели – id

Я пойду так:

В вашем шаблоне:

 <a href="<?php echo url_for('post/download?user_id='.$blog_user->getUserId()) ?>">Download file</a> 

Затем в вашем действии (используйте функцию от Miqdad Ali ):

  public function executeDownload(sfwebRequest $request) { $blog_user = Doctrine_Core::getTable('Blog_user')->find($request->getParameter('user_id')); $this->forward404Unless($blog_user); header('content-type:'); header('Content-Description: File Transfer'); //header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($blog_user->getFile())); 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->getFile())); ob_clean(); flush(); readfile($blog_user->getFile()); return sfView::NONE; } 

Вы можете записать этот файл внутри любого контроллера и вызвать эту функцию, когда пользователь нажимает на загрузку

 function download(){ $file = "path/to/the/file.zip"; if (file_exists($file)) { exit; } header('content-type:'); header('Content-Description: File Transfer'); //header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($file)); 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($file)); ob_clean(); flush(); readfile($file); exit; }