Я создаю сайт, используя 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; }