0

ブログ用に symfony を使用して Web サイトを作成しています。ユーザーは自分の投稿をサイトにアップロードできます。ユーザーがファイルを追加すると、内部に保存され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 テーブルにあります。私がしたいのは、ユーザーがファイルをアップロードするときです。user_id と blog_id の両方を blog テーブル内に保存する必要があります。どうやってするの?

ユーザー テーブル - user_id 、ファイル (アップロードされたファイル)

ブログ テーブル - blog_id - ブログ タイトルがあり、各タイトルには一意のブログ ID があるため、ユーザーは各タイトルの下にファイルをアップロードできます。

投稿テーブル - post_id、blog_id、user_id

4

2 に答える 2

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 に答える
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 に答える