Java Spring с Angular 16 загружает несколько файлов с прикрепленным JSONJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java Spring с Angular 16 загружает несколько файлов с прикрепленным JSON

Сообщение Anonymous »

У меня есть Java-приложение, работающее под управлением Spring, и в нем у меня есть конечная точка для получения нескольких файлов, но каждый раз, когда я нажимаю на него, я получаю «Состояние 415».
Это моя конечная точка :

Код: Выделить всё

@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public List uploadMediaToS3(@RequestPart("files") Set files,
@RequestPart("mediaUploads") Set mediaUploadDTOs,
@RequestParam("profileId") UUID profileId) throws IOException, FindMeDataNotFoundException {
logger.info("WORKED! " + profileId.toString());
return new ArrayList();
}
И вот как я создаю запрос в своем приложении Angular:
PS: postMedia — это массив { fileData: fileToSend, base64: event. target!.result!.toString() .

Код: Выделить всё

    let formDataWithFiles = new FormData();
let filesRaw = [] as Array;
let filesInfo = [] as Array;
this.postMedias.forEach(postMedia => {
filesRaw.push(new File([postMedia.base64], postMedia.fileData.fileName));
filesInfo.push(postMedia.fileData);
});
formDataWithFiles.append('files', new Blob(filesRaw));
formDataWithFiles.append('mediaUploads', JSON.stringify(filesInfo));
console.log(formDataWithFiles);
this.postService.uploadMedias(formDataWithFiles, this.profileId);
Вызов службы:

Код: Выделить всё

  uploadMedias(files: FormData, profileId: string) {
return firstValueFrom(this.appService.POST(`medias/upload?profileId=${profileId}`, files)).then(savedMedia => {
return savedMedia;
}, error => {
throw error;
});
}
Мои файлы загружаются в мое приложение Angular с помощью файла входного типа и сохраняются в переменной с помощью этого кода:

Код: Выделить всё

if (file.target.files[0]['size'] / 1e+6 == this.maxMediaSize) {
this.openSnackBar(this.translateService.instant('CUSTOM-FILE-INPUT.MAX-SIZE-ERROR') + `${this.maxMediaSize}Mb`, 2500);
} else {
let reader = new FileReader();
reader.readAsDataURL(file.target.files[0]);
let fileToSend: Media = {} as Media;
fileToSend.mediaExtension = file.target.files[0].type.substring(file.target.files[0].type.indexOf('/') + 1).toUpperCase();
fileToSend.mediaPrivacy = 'PUBLIC';
fileToSend.mediaPrice = 0.0
fileToSend.whenToDelete = new Date().getTime();
fileToSend.fileName = file.target.files[0].name;
fileToSend.mediaType = 'PROFILE_AVATAR_MEDIA';

reader.onload = (event) => {
this.formFiles.push({ fileData: fileToSend, base64: event.target!.result!.toString() });
};
}
Я пытался использовать Postman для проверки этой конечной точки, но тоже ничего не добился:
[img]https://i.sstatic. net/BT6FFSzu.png[/img]

У меня есть еще одна конечная точка, которая сохраняет один файл и работает отлично:

Код: Выделить всё

@PostMapping(value = "/update-avatar", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Media uploadAvatarToS3(@RequestPart("avatar") MultipartFile avatar,
@RequestPart("mediaUpload") MediaUploadDTO mediaUploadDTO,
@RequestParam("profileId") UUID profileId) throws IOException, FindMeDataNotFoundException {
return mediaService.uploadAvatar(avatar, profileId, mediaUploadDTO);
}
Мой файл application.properties содержит свойства «multipart»:

Код: Выделить всё

spring.servlet.multipart.enabled=true
spring.servlet.multipart.location=${java.io.tmpdir}
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB
Моя версия Spring — 3.3.3 с Java 17.
Если у кого-нибудь есть идеи, что я мог бы попробовать, это очень поможет! Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/793 ... n-attached
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»