从Angular 8向Spring Boot应用程序发送文件(图像)

从Angular 8向Spring Boot应用程序发送文件(图像),angular,spring-boot,Angular,Spring Boot,我想从angular 8应用程序向spring引导服务器发送一个文件 我尝试了Spring-MultiPartFile、HttpServletRequest和其他一些方法,但没有成功 我希望有人能告诉我如何在春天得到文件。。。如果我的angular应用程序需要一些更改 角度8 <input ngModel type="file" name="file" (change)="fileChange($event)" class="form-control-file" id="exampleIn

我想从angular 8应用程序向spring引导服务器发送一个文件

我尝试了Spring-MultiPartFile、HttpServletRequest和其他一些方法,但没有成功

我希望有人能告诉我如何在春天得到文件。。。如果我的angular应用程序需要一些更改

角度8

<input ngModel type="file" name="file" (change)="fileChange($event)" class="form-control-file" id="exampleInputFile" aria-describedby="fileHelp" required>
当我发送文件时-在组件中

onFormSubmitMentor() {

    const dataImage = new FormData();
    dataImage.append('myFile', this.imageMentor, this.imageMentor.name);
    this.useDetailsService.addMentor(dataImage).subscribe(data => {
      }, Error => {
        if (Error.error.error === 'Unauthorized') {
          alert('Unauthorized');
        }
      });
  }
服务

addMentor(dataImage) {
    const token = JSON.parse(localStorage.getItem('currentUser'));
    let headers = new HttpHeaders();
    headers = headers.append('Authorization', 'Bearer ' + token.token);
    headers = headers.append('Content-type', 'application/json');
    console.log(dataImage);
    return this.http
      .post(
        'http://localhost:8080/register/mentor',{file: dataImage}, {headers, responseType: 'text'}
      ).pipe(map((response: any) => {
        console.log(response);
        return response;
      }), catchError((err: any) => {
        console.log(err);
        return throwError(err);
      }));
  }

弹簧靴

@RequestMapping(value = "/register/mentor", method = RequestMethod.POST,consumes = "application/json")
    @ResponseBody
    public ResponseEntity<?> registerMentor(HttpServletRequest request) throws Exception {
//        connectionValidation.isAdmin();
        StringBuilder builder = new StringBuilder();
        try (BufferedReader in = request.getReader()) {
            char[] buf = new char[4096];
            for (int len; (len = in.read(buf)) > 0; )
                builder.append(buf, 0, len);
        }
        String requestBody = builder.toString();
        return saveMentorUser(new Mentor());
//        return saveMentorUser(mentor);
    }

@RequestMapping(value=“/register/mentor”,method=RequestMethod.POST,consumes=“application/json”)
@应答器
公共响应属性注册器(HttpServletRequest请求)引发异常{
//connectionValidation.isAdmin();
StringBuilder=新的StringBuilder();
try(BufferedReader in=request.getReader()){
char[]buf=新字符[4096];
对于(int len;(len=in.read(buf))>0;)
builder.append(buf,0,len);
}
字符串requestBody=builder.toString();
返回saveMentorUser(new Mentor());
//返回用户(导师);
}
我试过这个


标题内容被设置为JSON,这可能必须设置为表单数据作为传递表单数据
headers=headers.append('Content-type','multipart/formdata')我查看了Heroku CLI,我重新认识到这不是cors问题,但是,我在spring中的一个函数抛出了一个连接到Mongo的错误,但我猜Heroku没有理解它,并用cors问题进行了响应

@RequestMapping(value = "/register/mentor", method = RequestMethod.POST,consumes = "application/json")
    @ResponseBody
    public ResponseEntity<?> registerMentor(HttpServletRequest request) throws Exception {
//        connectionValidation.isAdmin();
        StringBuilder builder = new StringBuilder();
        try (BufferedReader in = request.getReader()) {
            char[] buf = new char[4096];
            for (int len; (len = in.read(buf)) > 0; )
                builder.append(buf, 0, len);
        }
        String requestBody = builder.toString();
        return saveMentorUser(new Mentor());
//        return saveMentorUser(mentor);
    }