0

我正在创建一个使用 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 表中,它包含 blog_id 作为主键,user_id 在用户表上。我想要做的是当用户上传文件时,user_id 和 blog_id 都应该保存在 blog 表中。怎么做?

用户表 - user_id ,文件(上传的文件)

博客表 - blog_id - 有博客标题,每个标题都有一个唯一的博客ID,以便用户可以在每个标题下上传一个文件,

发布表 - post_id、blog_id、user_id

4

2 回答 2

0

您可以将此文件写入任何控制器中,并在用户单击下载时调用该函数

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;
}
于 2012-06-05T08:49:54.380 回答
0

假设:

  • 你的模块名称是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;
  }
于 2012-06-05T09:48:03.777 回答