Javascript Can';t使用角度'上传图像;https客户端

Javascript Can';t使用角度'上传图像;https客户端,javascript,angular,http,Javascript,Angular,Http,我可以使用本机的fetch POST上传一张完美的图像: let formData = new FormData(); formData.append('file', event.target.files[0]); console.log(event.target.files[0]); fetch('http://localhost:8080/file/upload', { method: 'POST',

我可以使用本机的fetch POST上传一张完美的图像:

let formData = new FormData();
        formData.append('file', event.target.files[0]);
        console.log(event.target.files[0]);
        fetch('http://localhost:8080/file/upload', {
            method: 'POST',
            headers:{
                'Authorization': 'Bearer ' + JWT
            },
            body:formData
        }).then(response => console.log(response));
但是,当我使用Angular的HttpClient尝试此操作时,请求失败,因为未添加“内容类型”:“多部分/表单数据”

我的角度代码:

我调用服务的文件:

this.fileSaverService.uploadImage(event.target.files[0]).subscribe(
            (data)=>{
                console.log(data);
            },
            (error) => {
                console.log(error);
            }
        );
文件服务:

  uploadImage(fileToUpload) {
    const endpoint = 'http://localhost:8080/file/upload';
    const formData: FormData = new FormData();
    formData.append('file', fileToUpload);
    return this.api
      .post(endpoint, formData, { headers: {'Content-Type': 'multipart/form-data'} });
}
此.api文件:

  post(endpoint: string, body: any, reqOpts: any = {}) {    
    reqOpts.headers = this.handleHeaders(reqOpts.headers);
    return this.http.post(endpoint, JSON.stringify(body), reqOpts);
  }
如果在使用HttpClient时手动添加标头,则会得到此标头,而不带边界:

但是,如果我没有指定标头,则本机获取会自动将此标头与边界一起添加,并且效果很好:


我的选项是什么?

您的问题中的代码有两个问题:

  • 通过将
    Content Type
    设置为
    multipart/form data
    您自己,您的
    FormData
    的序列化将不会导致在后台设置正确的标题和边界
  • post
    函数中,有
    JSON.stringify(body)
    ,它将
    FormData
    对象转换为JSON字符串。完成此操作后,您只是尝试发布一个字符串,而不是一个完整的FormData对象