使用 Angular 4 上传文件不起作用。结果未定义
Upload File with Angular 4 does not work. Result undefind
使用 Angular 4 上传文件无效。结果未定义。
文件信息随事件一起出现,但 FormData 不起作用,导致结果未定义。
Html 文件
<form #form="ngForm" enctype="multipart/form-data" novalidate>
<input type="file" id="sef" name="sef" class="form-control" ngModel (change)="getSef($event)">
<button class="btn btn-primary" (click)="envirArquivos(form.value)">Enviar</button>
</form>
TS文件
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'mw-compare-nfe',
templateUrl: './compare-nfe.component.html'
})
export class CompareNFEComponent implements OnInit {
arquivoZip: any
getZip(event) {
let fileList: FileList = event.target.files;
let file: File = fileList[0];
console.log(file) . <--- The object file is defined.
let formData: FormData = new FormData();
this.arquivoZip = formData.append('File', file, file.name);
}
constructor() { }
ngOnInit() {
}
envirArquivos(order: Order) {
console.log(this.arquivoZip) . <--- Undefined
}
}
FormData.append
会将 add/append 当前值添加到您创建的 formData
实例中,但它本身 不会 return实例,见DOCS.
因此您必须附加文件并将其设置为单独行中的组件文件
let formData: FormData = new FormData();
formData.append('File', file, file.name);
this.arquivoZip = formData;
文件上传:- 完整代码
@Component({
selector: 'app-root',
template: '<div>'
+ '<input type="file" (change)="upload($event)">'
+ '</div>',
})
export class AppComponent {
constructor(private _service: commonService) { }
upload(event: any) {
let files = event.target.files;
let fData: FormData = new FormData;
for (var i = 0; i < files.length; i++) {
fData.append("file[]", files[i]);
}
var _data = {
filename: 'Sample File',
id: '0001'
}
fData.append("data", JSON.stringify(_data));
this._service.uploadFile(fData).subscribe(
response => this.handleResponse(response),
error => this.handleError(error)
)
}
handleResponse(response: any) {
console.log(response);
}
handleError(error: string) {
console.log(error);
}
}
服务
@Injectable()
export class commonService {
_url: string;
constructor(private http: Http) { }
uploadFile(data: any): Observable<{}> {
this._url = 'http://localhost:4200/XXXXXXXXXX/uploadFile';
return this.http.post(this._url, data)
.map(this.handleData)
.catch(this.handleError);
}
private handleData(res: Response) {
let data = res.json();
return data;
}
private handleError(error: Response | any) {
return Observable.throw('API failed');
}
}
使用 Angular 4 上传文件无效。结果未定义。
文件信息随事件一起出现,但 FormData 不起作用,导致结果未定义。
Html 文件
<form #form="ngForm" enctype="multipart/form-data" novalidate>
<input type="file" id="sef" name="sef" class="form-control" ngModel (change)="getSef($event)">
<button class="btn btn-primary" (click)="envirArquivos(form.value)">Enviar</button>
</form>
TS文件
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'mw-compare-nfe',
templateUrl: './compare-nfe.component.html'
})
export class CompareNFEComponent implements OnInit {
arquivoZip: any
getZip(event) {
let fileList: FileList = event.target.files;
let file: File = fileList[0];
console.log(file) . <--- The object file is defined.
let formData: FormData = new FormData();
this.arquivoZip = formData.append('File', file, file.name);
}
constructor() { }
ngOnInit() {
}
envirArquivos(order: Order) {
console.log(this.arquivoZip) . <--- Undefined
}
}
FormData.append
会将 add/append 当前值添加到您创建的 formData
实例中,但它本身 不会 return实例,见DOCS.
因此您必须附加文件并将其设置为单独行中的组件文件
let formData: FormData = new FormData();
formData.append('File', file, file.name);
this.arquivoZip = formData;
文件上传:- 完整代码
@Component({
selector: 'app-root',
template: '<div>'
+ '<input type="file" (change)="upload($event)">'
+ '</div>',
})
export class AppComponent {
constructor(private _service: commonService) { }
upload(event: any) {
let files = event.target.files;
let fData: FormData = new FormData;
for (var i = 0; i < files.length; i++) {
fData.append("file[]", files[i]);
}
var _data = {
filename: 'Sample File',
id: '0001'
}
fData.append("data", JSON.stringify(_data));
this._service.uploadFile(fData).subscribe(
response => this.handleResponse(response),
error => this.handleError(error)
)
}
handleResponse(response: any) {
console.log(response);
}
handleError(error: string) {
console.log(error);
}
}
服务
@Injectable()
export class commonService {
_url: string;
constructor(private http: Http) { }
uploadFile(data: any): Observable<{}> {
this._url = 'http://localhost:4200/XXXXXXXXXX/uploadFile';
return this.http.post(this._url, data)
.map(this.handleData)
.catch(this.handleError);
}
private handleData(res: Response) {
let data = res.json();
return data;
}
private handleError(error: Response | any) {
return Observable.throw('API failed');
}
}