Сейчас у меня сделано так:
public function actionFile($file){
$path = '';
if(Yii::$app->user->can('adminka')){
if($doc = Docs::find()->where(['file_name'=>$file])->one()){
$path = Yii::getAlias('@common').'/docs/'.$doc->user_id.'/'.$doc->file_name;
}
}else{
if($doc = Docs::find()->andWhere(['file_name'=>$file])->andWhere(['user_id'=>Yii::$app->user->id])->one()){
$path = Yii::getAlias('@common').'/docs/'.$doc->user_id.'/'.$doc->file_name;
}else{
throw new yii\web\ForbiddenHttpException;
}
}
if(!empty($path)){
$response = Yii::$app->response;
$response->format = \yii\web\Response::FORMAT_RAW;
$mime = yii\helpers\FileHelper::getMimeType($path);
header('Content-type: '.$mime);
echo file_get_contents($path);
}else{
throw new NotFoundHttpException;
}
}
Ссылка выглядит как domen/file/file_name.file_extention
Все работает, но не уверен, что это вменяемый способ. А самый главный вопрос "не помрет ли сервер при размере файла 100мб или 1Гб"?