导入节点
是后端的问题,不是角度问题,请求是正确的。
我想在我的angular5应用程序中一次上传不同的文件。为此,我使用type primitive = number | string | boolean;
export interface genericParameter {
[k: string]: primitive
}
。我将请求附加到数组中,如下面的代码所示。
将请求添加到数组后,它们都是相同的请求,这意味着我多次上传了一个文件,而不是不同的所选文件。在将它们添加到数组之前,您可以在屏幕截图中看到,这很好,服务创建了不同的请求。我知道这是某种指针问题,但是我不知道该如何解决,我尝试使用rsjx forkJoin
进行深层复制,但不适用于Object.assign({}, request)
。
控制台日志〜〜(忽略错误,由于某些独特的约束要求,服务器始终拒绝第二个请求-正确):〜〜
组件代码:
Observable
服务如下:
uploadFiles() {
var requests = [];
var ctrNoFailuer = this.filesReplace.length;
for (var i = 0; i < this.filesReplace.length; i++) {
let request = this.solutionFileService.update(this.filesReplace[i][0], this.filesReplace[i][1]);
console.log(request);
requests.push(request);
}
if (requests.length == 0) {
this.runTests();
} else {
forkJoin(requests).subscribe(
res => {
// [...]
}
)
}
}
答案 0 :(得分:1)
您的代码似乎正确,尽管您可以进行一些改进(分解,语法...),例如:
uploadFiles() {
const requests = this.filesReplace.map(fr => this.solutionFileService.update(fr[0], fr[1]));
if (!requests.length) {
this.runTests();
} else {
forkJoin(requests).subscribe(
res => {
// [...]
}
)
}
}
update(solutionFile: SolutionFile, file ?: File): Observable < SolutionFile > {
let url = `${this.url}/src_uploads/${solutionFile.id}/`;
const headers = file ?
new HttpHeaders({
'enctype': 'multipart/form-data',
'Authorization': `JWT ${this.authService.getToken()}`
}) : this.headers;
const formData: FormData = new FormData();
formData.append('student_solution', String(solutionFile.student_solution));
formData.append('file_src', file, file && file.name || undefined);
const payload = file ? formData : solutionFile;
return this.httpClient.put<SolutionFile>(url, payload, { headers })
.pipe(
catchError(() => this.handleError('UPDATE solution-file', new SolutionFile()))
);
}
另外,请以文本形式发布日志,因为并非每个人都可以访问imgur。您是否尝试记录forkJoin
调用的结果?
答案 1 :(得分:0)
我还没有完全理解这个问题,但是据我了解,forkJoin不适用于您,因为您尝试传递可观察变量数组。要解决该问题,请尝试应用一系列可观察对象:
forkJoin.apply(this, requests).subscribe(
希望这会有所帮助