angular material 5)を使用してファイル(角度5)をアップロードしようとしました。
app.component.html
<mat-horizontal-stepper [linear]="isLinear" #stepper="matHorizontalStepper">
<mat-step [stepControl]="firstFormGroup">
<form [formGroup]="firstFormGroup">
<ng-template matStepLabel>Upload your audio file</ng-template>
<mat-form-field>
<input matInput
style="display: none"
type="file" (change)="onFileSelected($event)"
#fileInput name ="file" formControlName="firstCtrl" required>
<button mat-button (click)="fileInput.click()" >Select File</button>
</mat-form-field>
<div>
<button mat-button matStepperNext>Next</button>
</div>
</form>
app.component.ts
export class AppComponent {
selectedFile: File=null;
isLinear = true;
firstFormGroup: FormGroup;
secondFormGroup: FormGroup;
constructor(private _formBuilder: FormBuilder, private http: HttpClient) {}
ngOnInit() {
this.firstFormGroup = this._formBuilder.group({
firstCtrl: ['', Validators.required]
});
this.secondFormGroup = this._formBuilder.group({
secondCtrl: ['', Validators.required]
});
}
しかし、私はこのエラーが発生しました
ERROR Error: Input type "file" isn't supported by matInput.
このコードがangularマテリアルなしでうまく機能したことを知っています。何か問題はありますか?
私も同じ問題を抱えていました、
これをやってみてください、
<button mat-raised-button (click)="openInput()">Select File to Upload</button>
<input id="fileInput" hidden type="file" (change)="fileChange($event.target.files)" name="file" accept=".csv,.xlsv">
openInput(){
document.getElementById("fileInput").click();
}
上記のコードは、単純にMaterialボタンを作成し、openInput()メソッドを呼び出します。このメソッドは、後でそのボタンをHTMLコードの下に置き換えます。
<input id="fileInput" hidden type="file" >
これは私のために働いた。
ハッピーコーディング☻
より高速な解決策は、 https://github.com/danialfarid/ng-file-upload :を使用することです。
<md-button class='md-raised md-primary' id='uploadFile' ngf-multiple='true' ngf-select='upload($files, $file, $event)'
type = 'file'>ファイルのアップロード
それ以外の場合は、次のようなカスタムコードに移動する必要があります。
<label class="md-secondary md-raised md-button" md-ink-ripple for="input-file"> <span>Select File to upload</span> </label> <input type="file" ngf-select ng-model="input-file" name="input-file" id="input-file">
編集済み:
HTMLの場合:
<input #file type="file" nbButton multiple (change)="upload(file.files)" />
次に、コンポーネントで:
upload(files: any) {
this.yourServiceToUploadFiles.uploadFile(files).subscribe(
(response: any) => { .......})}
そしてあなたのサービスで:
uploadFile(files: any[]): Observable<HttpResponse<Blob>> {
if (files.length === 0) {
return;
}
const formData = new FormData();
for (const file of files) {
formData.append(file.name, file);
}
return this.http.post(`${apiUrl}/yourServiceEndPoint`, formData, {
observe: "response",
responseType: "blob"
});
}