2015-06-22 99 views
0

我有一個網站,人們會來,他們將填寫表格,然後他們將收到鏈接下載數據集文件,每個文件都是650 MB。我不想使用硬編碼路徑,否則我的表單不會有用,人們將開始通過硬鏈接下載這些文件。yii2 php如何動態生成下載文件鏈接的文件更大的大小,如650 MB

我不確定如何生成具有這種能力的動態隨機鏈接文件,以提供650 MB大小的文件。

+0

除非是動態每次生成的文件,或者您請求的數目或一定量的時間之後刪除的文件,真的不知道,你可以阻止別人只要求通過鏈接本身的文件。 – Fluffeh

+0

您可以將鏈接/散列存儲在數據庫中,並通過重定向器使其可用於多種用途。 – Fluffeh

回答

1

這是一項高級任務,但並非不可能。首先,從創建帶有字段的數據庫表開始:id,file_path,hash,active - 然後爲此表創建Active Record模型。

創建控制器下載的行動,需要$哈希值作爲參數,並把下面的邏輯有:

<?php 
public function actionDownload($hash){ 
    $model = FileModel::find()->where(['hash'=>$hash])->one() 
    if($model && $model->active == 1){ 
     $file = $model->file_path; 
    $model->active = 0; 
    $model->save(false); 
    return $this->render('download',['file'=>$file]); 
    } 

     return $this->render('downloadLinkExpired'); 
    } 

下載查看:

<?php 
if (file_exists($file)) { 
     Yii::$app->response->sendFile($file); 

    } 

然後,在你的表單控制器基於MD5哈希在當前時間,也許一些表單字段(只是爲了避免重複散列)。併爲每個鏈接,在數據庫中保存新模型。最後,使用散列參數呈現鏈接。

Url::toRoute('file/download', ['hash'=>$hash])