Angular загрузить файл без файла на бэкэнд (400 неверный запрос) - PullRequest
1 голос
/ 25 мая 2020

Как я могу загрузить файл без файла в бэкэнд

Я отправляю null в файл в параметре (не выбирает файл)

Angular:

//this.currentFileUpload -> null
this._reportService.createReportTemplate(this.reportTemplate.code, this.reportTemplate.name, this.reportTemplate.status, this.currentFileUpload)
        .subscribe(res => {

            console.log('Save report', res);
        });

Angular Сервис:

private httpOptions(): HttpHeaders {
    return new HttpHeaders({
        'Authorization': token is here // doesn't matter
    });
};


createReportTemplate(templateCode: string, templateName: string, status: string, file: File): Observable<any> {
    const data: FormData = new FormData();

    data.set('file', file);
    return this
        .http
        .post('/address/upload' + templateCode + '&Rname=' + templateName + '&Status=' + status, data, {headers: this.httpOptions()});
}

Бэкэнд:

@PostMapping(value="/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ApiOperation(value = "With upload file")
public CReportTemplates create(@RequestParam("file") MultipartFile file,
                               @RequestParam("Code") String code,
                               @RequestParam("Rname") String rname,
                               @RequestParam("Status") String status
) throws IOException {}

1 Ответ

1 голос
/ 26 мая 2020

Вам нужно установить параметры, которые должны быть нулевыми, как optional в объявлении Spring.

Angular

Я рекомендую проверить, существует ли файл или выбрано, поэтому вы не отправляете на бэкэнд.

const data: FormData = new FormData();
if ( file != null /* or whatever clause you want to test that the file exists or not */ ) {
  data.set('file', file);
}

Spring Backend

Укажите, что параметр является необязательным. В зависимости от вашей версии Spring и Java импелментация может отличаться.

// In case of Java < 8, try this
@RequestParam(value = "file", required = false) MultipartFile file,

// In case of Java > 8, try this
@RequestParam("file") Optional<MultipartFile> file,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...