Скачать файлы базы данных по их настоящим именам - PullRequest
0 голосов
/ 12 июня 2019

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

В моей модели много файловых вложений (много attachOne), и нет проблем с получением ссылкиим

<a href="{{ model.myfile.path }}" target="_blank">{{ model.myfile.filename }}</a>

Я хочу загрузить эти файлы с их настоящим именем.
Я пытаюсь определить обработчик событий ajax в моем макете следующим образом:

    function onDonwload()
    {
        $path = post('path');
        $name = post('name');

       // Storage::exists('uploads/public/5ce/28c/3aa/5ce27c3aae590316657518.pdf');     => OK
        // Storage::exists($path);   =>OK

        $path = storage_path().'/app/'. $path;
        return Response::download( $path, $name);
    }

и

<button data-request="onDonwload"   
  data-request-data="path: 'uploads/public/5ce/28c/3aa/5ce27c3aae590316657518.pdf', name: 'my real name">  
  Download  
</button>

Нет ошибки отсутствующего файла, но заставьте браузер зависнуть с предупреждением, которое говорит: «Веб-страница замедляет работу вашего браузера, что вы хотите сделать?».

Я пропустил важный момент?

1 Ответ

0 голосов
/ 13 июня 2019

Вы должны добавить отдельную страницу для загрузки файлов, Ajax не может помочь вам загрузить файл (может быть, это может быть, но процесс немного сложен и длинен)

  1. создать страницу с /file-download/:id здесь вы можете указать любой URL с параметром :id и дать ему имя file-download вы можете указать любое имя, которое вам нравится для демонстрации, я использовал это имя.

В этом разделе страницы HTML будет пустым, а в разделе кода страницы добавьте этот код.здесь вы также можете проверить дополнительную проверку безопасности, как будто пользователь вошел в систему или нет, файл связан с пользователем или нет.сейчас я просто проверяю, файл связан с конкретным модальным или нет.
function onStart() {
    $fileId = $this->param('id');
    $file = \System\Models\File::find($fileId);
    // for security please check attachment_type == your model with namespace
    // only then lat use download file other wise user can download all the files by just passing id
    if($file && $file->attachment_type == 'Backend\Models\User') { // here add your relation model name space for comparison
      $file->output('attachment');  
    }
    else {
      echo "Unauthorised.";
    }
    exit();
}
Генерация ссылок, пожалуйста, замените имя страницы на страницу, которую вы создали.
<a href="{{ 'file-download'|page({'id': model.myfile.id}) }}" >{{ model.myfile.filename }}</a>

Теперь при нажатии на ссылку файл должен быть загружен с его исходным именем, а для недопустимого файлаЕсли оно показывает сообщение Unauthorised..

, если есть сомнения, прокомментируйте.

...