角度文件上传到Teamwork API

时间:2019-05-31 11:03:41

标签: angular typescript

这是我的问题...

我正在尝试通过Angular 6将文件上传到Teamwork API https://developer.teamwork.com/projects/file-uploading/upload-a-file 但是无论我尝试上传什么文件,我总是会收到错误消息 “表单字段“文件”不包含有效文件”

我尝试发送没有内容类型,内容类型的消息:未定义等 我尝试将文件对象添加到formdata

以下是一些代码:

---模板文件---

<input type="file" [id]="question.id" class="form-control" (change)="onUpload($event)">
<button class="btn btn-update"><i class="icon-success file-continue" (click)="onUpdate($event)"></i></button>

---组件---

onUpload(event: any) {
  this.uploadObject = event.target.files[0];
  this.uploadName = event.target.files[0].name;
}
onUpdate(event: any) {
  this.twApiService.uploadFile(this.uploadObject).subscribe(
    (response: any) => {
      console.log(response);
    },
    (error: any) => {
      console.log(error);
    }
  );
}

---服务---

uploadFile(uploadObject: any) {
  const url = 'https://[hidden].teamwork.com/pendingfiles.json';
  const fileObject = { file: uploadObject };
  const headers = new HttpHeaders({'Content-Type': 'multipart/form-data', 'Authorization': 'BASIC ' + window.btoa(this.key + ':xxx')});
  return this.http.post(url, fileObject, {headers});
}

在过去3天里,我在互联网上找到的所有内容都尝试了此代码的许多版本,但没有任何效果。我总是收到此错误: “表单字段“文件”不包含有效文件”

有人可以给我一些指导,以解决此问题,或者至少尝试不同的尝试吗?

致谢,伊沃。

1 个答案:

答案 0 :(得分:0)

我检查团队合作API及其奇怪之处,因为他们希望请求正文为application / json(通常文件上传是通过formdata请求进行处理的)

因此,请首先尝试此操作,然后在“网络”标签中检查是否为application / json请求:

uploadFile(uploadObject: any) {
  const url = 'https://[hidden].teamwork.com/pendingfiles.json';
  const fileObject = { file: uploadObject };
  const headers = new HttpHeaders({'Authorization': 'BASIC ' + window.btoa(this.key + ':xxx')});
  return this.http.post(url, fileObject, {headers});
}

如果那不起作用,请尝试使用formData方法 重要的是不要手动设置formData类型,因为它会自动识别它。

uploadFile(uploadObject: any) {
  const url = 'https://[hidden].teamwork.com/pendingfiles.json';
  const formData = new FormData();
  formData.append('file', uploadobject);
  const headers = new HttpHeaders({'Authorization': 'BASIC ' + window.btoa(this.key + ':xxx')});
  return this.http.post(url, formData, {headers});
}