duc*_*com 5 java spring spring-boot
如何在Spring Boot中实现多个文件上传功能,每个文件都有自己的额外字段(例如comment,documentType)?
这个答案可能相关,但仅适用于单个文件: Spring boot controller - Upload Multipart and JSON to DTO
您可以在有效负载中编码多个请求部分POST
,并使用 Spring Boot 对其进行处理。
假设您需要为每个文件传递两件事:
Blob
与文件内容metadata
- 一个可以容纳任何内容的对象 - 标题/评论 - 你能想到的。你可以使用任何东西来模拟FormData
参数,这是在 TypeScript 中:
假设一个文档如下所示:
export interface NewDocument {
title: string,
comment: string,
author: string,
file: File
}
Run Code Online (Sandbox Code Playgroud)
所以 FormData 的生成可能是这样的:
private getFormData(doc: NewDocument): FormData {
let formData: FormData = new FormData();
const json: Blob = new Blob([JSON.stringify(doc)], {type: 'application/json'});
formData.append('metadata', json); //adding the metadata
const blob: Blob = new Blob([doc.file[0]], {type: doc.file[0].type});
formData.append('file', blob); //adding the file contents
return formData;
}
Run Code Online (Sandbox Code Playgroud)
然后您可以将POST
表单数据发送到给定端点。
RequestParts
您可以在请求中指定您期望的不同内容
@PostMapping
public ResponseEntity<Void> uploadFile(@RequestPart("metadata") FileMetadata metadata,
@RequestPart("file") MultipartFile file) {
//process
}
Run Code Online (Sandbox Code Playgroud)
FileMetadata
这是一个自定义 Java POJO,您可以将前端的 JSON 表示反序列化到其中NewDocument
您应该能够将其转换为多个版本。
@PostMapping
public ResponseEntity<Void> uploadFile(@RequestPart("metadata") FileMetadata[] metadatas,
@RequestPart("file") MultipartFile[] files) {
//process
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是如何识别哪个元数据属于哪个文件。
一种简单的方法是将文件名编码在元数据对象中,并将其用于映射。
归档时间: |
|
查看次数: |
8767 次 |
最近记录: |