2

我需要通过的multipart/form-data的一些元信息像这样一起上传文件:文件上传Angular2通过的multipart/form-data的,400错误

Header 
----boundary 
Meta 
----boundary 
File 
----boundary 

出于某种原因,我总是得到400错误,后端服务器告诉我,缺少Meta -Field。但是,如果我使用Wireshark查看Hex/Ascii转储,则该字段肯定存在。
下面卷曲命令运行完美,在文件被成功上传:

curl -H "Expect:" -v -i -X POST -H "Content-Type: multipart/form-data" -H "Authorization: "token" -F "[email protected]/location" -F 'Meta={"access":"token"}' http://path 

因此,这似乎并没有成为一个后端的失败。我的Angular(4.1.3)请求必须是坏的,但我无法弄清楚它有什么问题。

模板的代码:

<input #file_input type="file" (change)="onFileInputChange($event)" multiple> 

Angular2码:

onFileInputChange(event) { 
    let fileList: FileList = event.target.files; 
    for (let i = 0; i < fileList.length; i++) { 
    let fp: File = fileList[i]; 
    let formData: FormData = new FormData(); 
    formData.append('File', fp, fp.name); 
    const body = JSON.stringify({ 
     'access': "token" 
    }); 
    this.formData.append('Meta', body); 
    let RequestHeader = new Headers(); 
    // auto set content type 
    RequestHeader.append('Content-Type', ''); 
    RequestHeader.append('Accept', 'application/json'); 
    RequestHeader.append('Authorization', "token"); 

    this.http.post(this.backend_url, formData, RequestHeader).map(
    res => res.json()).subscribe(
      data => console.log('success'), 
      error => console.log(error)) 
    } 
} 

缺少什么我在这里?

回答

0

我终于找到了解决方案。 该Content-Type头格式错误:在实际的代码

Content-Type: , multipart/form-data; boundary=----WebKit12345 

内容类型报头被预先设定。 通过调用

headers.set('Content-Type', ''); 

我认为,此时的标题内容类型被覆盖,但实际上是空字符串前面加上它,所以,有一个逗号,它不能被解析的,当然。

headers.delete('Content-Type'); 

我通过完全删除内容类型报头解决了这个
相关问题