как скачать файл используя laravel и vuejs - PullRequest
0 голосов
/ 28 февраля 2020

Я создал файл .xlsx в laravel и отправляю его на vuejs следующим образом

function excel (Request $request){
  $dlink = public_path('storage/reports/comunicacion_piciz.xlsx');
  $writer = new Xlsx($spreadsheet);
  $writer->save($dlink);
  $headers = ["Content-Type" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"];
  return response()->download($dlink,'comunicacion_piciz.xlsx', $headers);
}

, когда я вызываю этот метод в vuejs, используйте этот код

sendFile () {
  request.post(`api/log/excel`, {array: this.excelData, title: this.log})
  .then(res => {
    var newBlob = new Blob([res.data], {
    type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'})
    console.log(res.data)
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
      window.navigator.msSaveOrOpenBlob(newBlob)
      return
    }
    const data = window.URL.createObjectURL(newBlob)
    var link = document.createElement('a')
    link.href = data
    link.download = 'comunicacion_piciz.xlsx'
    link.click()
    setTimeout(function () {
      window.URL.revokeObjectURL(data)
    }, 100) 
    this.$spinner.close()
    })
    .finally(() => {
      this.$spinner.close()
    })
  }

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

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="Reporte Excel"');
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
exit;

также поврежден, я думаю, что что-то пропустил в vue части, но не уверен

1 Ответ

0 голосов
/ 28 февраля 2020

Вот простое решение:

Измените свой метод для сохранения файла вместо отправки и верните имя

Создайте другой метод или новый контроллер для загрузки файла

this.loading = true
axios.post(your_url_to_create_xlsx_and_store,data).then(resp => {
   this.loading = false;
   window.open(your_url_to_download_your_file?file="+resp.data.filename,"_blank")
})
...