2015-06-22 3 views
0

У меня есть сайт, на который придут люди, и они заполнит форму, после чего они получат ссылки на скачивание файлов набора данных, каждый из которых составляет 650 MB. Я не хочу использовать hardcoded paths, иначе моя форма не будет полезна, и люди начнут загружать эти файлы через жесткие ссылки.yii2 php как динамически генерировать ссылку для файла загрузки для файла размером больше 650 МБ

Я не уверен, как создать динамически случайный файл ссылок с такой возможностью для обеспечения файлов размером 650 МБ.

+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 хэш на основе на текущее время и, возможно, на некоторые поля формы (просто чтобы избежать дублирования хэша). И для каждой ссылки сохраните новую модель в базе данных. Наконец, визуализируйте ссылки с параметром hash.

Url::toRoute('file/download', ['hash'=>$hash]) 
Смежные вопросы