我正在使用symfony创建一个博客网站。用户可以将他们的帖子上传到网站。当用户添加文件时,它将保存在web/upload/file_upload
中,文件路径将保存在表中add_post
。当管理员查看add_post
表模板时,他可以看到每个用户的下载文件的路径,我想做的是通过这个文件路径下载文件。
我该怎么做?
编辑 1:
型号 - Blog_user模块 - 帖子
表结构 - 表名 - 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表中,文件保存在 web/upload 目录中。
编辑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
它如何保存在侧 web/upload/post_upload 目录中,相同的路径也将保存在 db 中
编辑 3:
当用户上传博客时,它将保存在blog_user表中,它由博客_id作为主键组成,user_id在用户表上。 我想做的是当用户上传文件时,user_id和blog_id都应该保存在博客表中。 怎么办?
用户表 - user_id , 文件(上传的文件)
博客表 - blog_id - 有博客标题,每个标题都有一个唯一的博客ID,以便用户可以在每个标题下上传一个文件,
邮政表 - 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;
}