Загрузка файла с разными типами файлов (Vue и Laravel) - PullRequest
0 голосов
/ 08 ноября 2019

В настоящее время я могу загрузить файл между ними, но возникают проблемы, когда файл может иметь любой формат. Например, на сайте у пользователя есть возможность загружать «ресурс», который может быть любым, начиная от PDF, до JPG и т. Д.

Я хочу иметь возможность установить имя файла на внешнем интерфейсе вVue к тому, что возвращается из бэкэнда в Laravel (например, soccer_video.mp4, gun.jpg и т. Д.)

Функция Laravel:

public function download($id)
{
    try {
        $asset = Asset::findOrFail($id);
    } catch(ModelNotFoundException $e) {
        return response()->json(['status' => 'error', 'data' => null, 'message' => 'Asset not found'], 404);
    }

    if(empty($asset->file)) {
        return response()->json(['status' => 'error', 'data' => null, 'message' => 'This asset does not have an associated file'], 500);
    }

    $extension = pathinfo($asset->file, PATHINFO_EXTENSION);

    if(empty($extension)) {
        return response()->json(['status' => 'error', 'data' => null, 'message' => 'This file extension of this asset could not be determined'], 500);
    }

    $file_name = $asset->name.'.'.$extension;

    return Storage::download($asset->file, $file_name);
}

Функция Vue:

 download(id) {
  return axios.get(process.env.API_URL + `asset-download/${id}`, { responseType: 'blob' })
    .then(response => {
        return response;
    })
},

 download: function() {
  this.loading_download_asset = true;

  AssetsApi.download(this.asset.id)
    .then(response => {
      const blob = new Blob([response.data], { type: response.data.type })
      console.log(response.type)

      let link = document.createElement('a');
      link.href = window.URL.createObjectURL(blob);
      link.download = 'test.jpg';

      link.click();
    })
    .catch(error => {
      console.log(error);
      this.$logRocket.captureException(error);
    })
    .finally(() => {
      this.loading_download_asset = false;
    });
},

Я попытался получить имя файла из заголовка, используя:

 response.request.getResponseHeader('Content-Disposition');

Но получаю ошибку:

"Отказался получить небезопасный заголовок« Content-Disposition »

При просмотре вкладки сети я вижу «расположение содержимого»:

a busy cat

Как можно получить доступ к имени, заданному в бэкэнде

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...