将一个空的多部分文件从 angular 6 发送到 spring boot
Sending an empty multipart file from angular6 to springboot
我想将图像文件发送到 spring 引导后端。上传图片时,post 请求工作 fine.But 如果没有上传图片文件,它会给我一个错误。
如果用户没有上传任何图片,我尝试发送 null。但是它给了我一个错误。
这是我的 onSubmit 函数
onSubmit() {
// tslint:disable-next-line:max-line-length
if ( this.addEntityForm.value.entityCode !== '' && this.addEntityForm.value.entity !== '' && this.addEntityForm.value.eDisplayName !== '') {
const formData: FormData = new FormData();
formData.append('name',this.addEntityForm.value.entityCode);
formData.append('description',this.addEntityForm.value.entity);
formData.append('displayName',this.addEntityForm.value.eDisplayName);
if (this.selectedFile != null){
formData.append('logo', this.selectedFile);
}
else {
formData.append('logo', null);
}
formData.append('status','ACTIVE');
console.log(formData);
this.profileServise.addNewEntity(formData).subscribe( result => {
if (result) {
this.globalService.updateEntityTable(result);
}
this.openSnackbar('New Entity Created Successfully');
this.matDialogRef.close();
}, error => {
this.openSnackbar('An Error in Creating a New Entity');
});
} else {
this.openSnackbar('Please fill all required fileds !!!');
}
}
这是我用来选择图片的函数。
onFileChanged(event) {
this.selectedFile = event.target.files[0];
}
这是我的后端控制器方法
@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/addNewEntity", method = RequestMethod.POST)
public ResponseEntity<CompanyDTO> photoUploaded(@RequestParam(value = "name", required = true) String name,
@RequestParam(value = "description", required = true) String desc,
@RequestParam(value = "displayName", required = true) String displayName,
@RequestParam(value = "logo", required = true) MultipartFile logo,
@RequestParam(value = "status", required = true) String status
) {
// getting file extension
String fileExtension = logo.getOriginalFilename().substring(logo.getOriginalFilename().lastIndexOf(".")+1);
//convert to bytes
byte[] image = new byte[0];
try {
image = logo.getBytes();
} catch (IOException e) {
e.printStackTrace();
}
Company company = new Company();
company.setName(name);
company.setDescription(desc);
company.setDisplayName(displayName);
company.setLogo(image);
company.setStatus(status);
this.companyService.saveCompany(company);
log.debug("edited entity"+company.getName());
CompanyDTO newrow = new CompanyDTO(company.getId(),company.getName(),company.getDescription(),company.getDisplayName(),company.getLogo(),company.getStatus());
return new ResponseEntity<>( newrow,HttpStatus.OK);
}
如果用户没有选择图片,我将发送 'null'。它给了我这个错误
org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'logo' is not present```
您将 API POST 参数标记为 required=true
,如果参数是可选的并且可以包含 null
值,则需要将其标记为 required=false
@RequestMapping(value = "/addNewEntity", method = RequestMethod.POST)
public ResponseEntity<CompanyDTO> photoUploaded(@RequestParam(value = "name", required = true) String name,
@RequestParam(value = "description", required = true) String desc,
@RequestParam(value = "displayName", required = true) String displayName,
@RequestParam(value = "logo", required = false) MultipartFile logo,
@RequestParam(value = "status", required = true) String status
)
我想将图像文件发送到 spring 引导后端。上传图片时,post 请求工作 fine.But 如果没有上传图片文件,它会给我一个错误。
如果用户没有上传任何图片,我尝试发送 null。但是它给了我一个错误。
这是我的 onSubmit 函数
onSubmit() {
// tslint:disable-next-line:max-line-length
if ( this.addEntityForm.value.entityCode !== '' && this.addEntityForm.value.entity !== '' && this.addEntityForm.value.eDisplayName !== '') {
const formData: FormData = new FormData();
formData.append('name',this.addEntityForm.value.entityCode);
formData.append('description',this.addEntityForm.value.entity);
formData.append('displayName',this.addEntityForm.value.eDisplayName);
if (this.selectedFile != null){
formData.append('logo', this.selectedFile);
}
else {
formData.append('logo', null);
}
formData.append('status','ACTIVE');
console.log(formData);
this.profileServise.addNewEntity(formData).subscribe( result => {
if (result) {
this.globalService.updateEntityTable(result);
}
this.openSnackbar('New Entity Created Successfully');
this.matDialogRef.close();
}, error => {
this.openSnackbar('An Error in Creating a New Entity');
});
} else {
this.openSnackbar('Please fill all required fileds !!!');
}
}
这是我用来选择图片的函数。
onFileChanged(event) {
this.selectedFile = event.target.files[0];
}
这是我的后端控制器方法
@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/addNewEntity", method = RequestMethod.POST)
public ResponseEntity<CompanyDTO> photoUploaded(@RequestParam(value = "name", required = true) String name,
@RequestParam(value = "description", required = true) String desc,
@RequestParam(value = "displayName", required = true) String displayName,
@RequestParam(value = "logo", required = true) MultipartFile logo,
@RequestParam(value = "status", required = true) String status
) {
// getting file extension
String fileExtension = logo.getOriginalFilename().substring(logo.getOriginalFilename().lastIndexOf(".")+1);
//convert to bytes
byte[] image = new byte[0];
try {
image = logo.getBytes();
} catch (IOException e) {
e.printStackTrace();
}
Company company = new Company();
company.setName(name);
company.setDescription(desc);
company.setDisplayName(displayName);
company.setLogo(image);
company.setStatus(status);
this.companyService.saveCompany(company);
log.debug("edited entity"+company.getName());
CompanyDTO newrow = new CompanyDTO(company.getId(),company.getName(),company.getDescription(),company.getDisplayName(),company.getLogo(),company.getStatus());
return new ResponseEntity<>( newrow,HttpStatus.OK);
}
如果用户没有选择图片,我将发送 'null'。它给了我这个错误
org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'logo' is not present```
您将 API POST 参数标记为 required=true
,如果参数是可选的并且可以包含 null
值,则需要将其标记为 required=false
@RequestMapping(value = "/addNewEntity", method = RequestMethod.POST)
public ResponseEntity<CompanyDTO> photoUploaded(@RequestParam(value = "name", required = true) String name,
@RequestParam(value = "description", required = true) String desc,
@RequestParam(value = "displayName", required = true) String displayName,
@RequestParam(value = "logo", required = false) MultipartFile logo,
@RequestParam(value = "status", required = true) String status
)