【问题标题】:How to download a file on clicking thefile path using PHP-Symfony?如何使用 PHP-Symfony 单击文件路径下载文件?
【发布时间】:2012-06-06 14:01:19
【问题描述】:

我正在使用 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 表 - post_id、blog_id、user_id

【问题讨论】:

  • 您是否正在使用管理员生成器来获取管理员视图?顺便说一句,symfony 1.4 还是 2.0?
  • 不,我没有使用管理生成器.. 我使用的是 symfony 1.4.16
  • 您没有表的ID? blog_user 表的主键是什么?
  • 你能给我们看看你的数据库中file的例子吗?
  • E:\xampp\htdocs\trunk\web\uploads/post_upload/post_Uploaded -JS.pdf 这就是它在db中保存的方式

标签: php symfony1 upload symfony-1.4


【解决方案1】:

假设:

  • 您的模块名称是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;
  }

【讨论】:

  • 它给我一个错误 404 在此服务器上找不到请求的 URL /frontend_dev.php/application/download/user_id//home/MyBlog/trunk/web/uploads/post_upload/post.pdf
  • 好吧,给我更多信息。更新您的问题:模型名称、模块名称、表结构和一个内容。我会更新我的答案。
  • Model - Blog_user = Application Module - post -------------------- Table Structre - table name- Blog_user user_id bigint(20) gender varchar (255) blog_status tinyint(1) 文件 varchar(255)
  • @farah 最好编辑您的答案并将这些信息放入其中,这样会更容易阅读。
  • Form - 'user_id' => new sfWidgetFormInputHidden(), 'gender' => new sfWidgetFormInputText(), 'file' => new sfWidgetFormInputFile(),
【解决方案2】:

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

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;
}

【讨论】:

  • 好的,在我的 listAllPost 模板上,我显示了我通过每个 user_id 的参数传递的所有帖子,并使用 addPost 模板显示有关用户的所有详细信息,例如用户 ID、用户类型、帖子标题和职位。在帖子下方,它显示用户上传的特定文件的文件路径。那么我是否可以提供该路径作为链接并下载该文件?
  • 你可以这样调用 yourdomain.com/controller/download/filename 并将函数更改为函数下载($argument)
  • 这是我到目前为止所做的——我创建了一个指向文件路径的链接,就像这样 getPost() ?> 它输出 - /home/dev/myBlog/trunk/web/uploads/post_upload/post_title.pdf 这是我的控制器 公共函数 execute($request) { $this->jobseeker = Doctrine_Core::getTable('Jobseeker')->find(array($request->getParameter('user_id')));可以按照这个使用你之前提到的方法吗?
  • 例如,我在控制器文件中编写此函数,然后我将其称为 下载,我将更改文件路径并下载方法中的名称
猜你喜欢
  • 2011-05-29
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
相关资源
最近更新 更多