Мой процесс начинается в этой 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/), чтобы я мог импортировать содержимое электронной таблицы в базу данных (поэтому, пожалуйста, дайте мне знать, есть ли более простой способ добраться до этой стадии!)
Спасибо за любую помощь