Как загрузить файл Excel (.xlxs) из Angular front end в Laravel API? - PullRequest
0 голосов
/ 09 марта 2020

Мой процесс начинается в этой HTML форме:

<form [formGroup]="fileForm" enctype="multipart/form-data">
  <input
    type="file"
    accept=".xlsx"
    formControlName="file"
    (change)="onFileChange($event.target.files)"
  />
</form>

Когда файл выбран, вызывается onFileChange(), что делает следующее:

public onFileChange(files: FileList): void {
  if (files.length) {
    this.file = files[0];
  }
}

После того, как файл установлен, пользователь нажимает кнопку загрузки:

public onUploadClick(): void {
  if (this.file) {
    this.fileService.uploadFile(this.file).subscribe();
  }
}

My fileService, а затем обрабатывает отправку HTTP-запроса к API:

public uploadFile(file: File): Observable<APIResponse> {
  const url = `${environment.apiURL}/api/other/upload`;

  const formData = new FormData();
  formData.append("file", file, file.name);

  return this.http.post<APIResponse>(url, { formData });
}

Наконец, код в моем FileController:

public function upload(Request $request)
{
    dd($request->all()); // Shows as [ "formData" => [] ]

    $file = $request->file('file');
    dd($file); // Shows as null
}

Извините за стену кода, но хотел дать вам четкое представление о том, как она работает в настоящее время.

Из того, что я нашел в Интернете, используя FormData это правильно. Я почти уверен, что эта часть работает правильно, потому что если я сделаю console.log(formData.get("file"));, он отобразит файл.

Я также много видел о заголовке типа контента. Я попытался установить значение undefined, application/json, а также application/vnd.openxmlformats-officedocument.spreadsheetml.sheet (это тип файла, когда он регистрируется в консоли).

На стороне Laravel Как бы я ни пытался напечатать файл, он всегда отображается как [] или null.

Также нет ошибок, вызванных Angular или Laravel.

Для некоторого контекста я пытаюсь импортировать электронную таблицу, чтобы затем использовать Laravel Excel (https://docs.laravel-excel.com/), чтобы я мог импортировать содержимое электронной таблицы в базу данных (поэтому, пожалуйста, дайте мне знать, есть ли более простой способ добраться до этой стадии!)

Спасибо за любую помощь

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