Java 在Spring Boot中上载多个文件的最佳方法
我在SpringBoot项目中工作,我有两个实体 客户实体:Java 在Spring Boot中上载多个文件的最佳方法,java,spring,spring-boot,Java,Spring,Spring Boot,我在SpringBoot项目中工作,我有两个实体 客户实体: @Entity public class Client { // mapping annotation ... private Long id; // mapping annotation ... private String firstName; // mapping annotation ... private String lastName; // mapping annotation ... private Set&l
@Entity
public class Client {
// mapping annotation ...
private Long id;
// mapping annotation ...
private String firstName;
// mapping annotation ...
private String lastName;
// mapping annotation ...
private Set<Document> listDocument;
....
}
我的应用程序有一个表单,我可以在其中设置客户端的所有信息。另外,我有一个输入文件,需要上传多个文档。因此,当我单击“提交”按钮时,我必须将客户端信息保存到数据库中,同时所有关于文档(具有客户端Id)的信息(文档名称、大小…)都应保存在数据库中,然后将文件上载到服务器
我使用的是带Angular的Spring Boot,我不是在问代码,但我只是想知道根据最佳实践,实现这一点的最佳方法是什么。我不理解这个问题的本质 在我看来,有必要先将文件上传到存储器。上载操作应该是事务性的(全部或无)。任何文件上载过程中出错整个上载失败。如果上载成功-则将有关文件的信息保存到数据库中 我建议存储有关上载文件的以下附加信息:
System.currentTimeMillis()
或UUIDUUID.randomUUID().toString()形式的时间
https://file-storage/user-john-dou/logo.jpg
如果您正在处理图像,您可以考虑在存储之前调整大小。我也有一个类似的用例。我们已经通过文件压缩方法实现了这一点(
需要更少的存储空间,对于小文档来说速度更快
)。当客户端上传文档时,我们创建新的Zip文件,并以一种独特的方式命名它。
(不更改原始文件的名称)。例如,您可以使用clientID+uploadTime
指定一个唯一的名称
现在可以有多种存储方式(用于快速文档检索)
- 只创建一个目录(不是理想的方法)
- 根据
ClientId
- 根据上传时间(日、月)创建目录
如果所有文档上传成功,则可以将文档信息保存在表中。请注意,如果将来路径发生更改,则存储文档的路径可能会产生问题,因此只存储文档的名称。因为这里需要存储每个文档的详细信息,所以可以创建两个表<代码>一个带有id(pk)、客户端id、zip文件名的表,另一个带有id(fk)、文档名、大小等的表。
您可以在应用程序属性
MULTIPART (MultipartProperties)
spring.servlet.multipart.enabled=true # Whether to enable support of multipart uploads.
spring.servlet.multipart.file-size-threshold=0B # Threshold after which files are written to disk.
spring.servlet.multipart.location= # Intermediate location of uploaded files.
spring.servlet.multipart.max-file-size=1MB # Max file size.
spring.servlet.multipart.max-request-size=10MB # Max request size.
spring.servlet.multipart.resolve-lazily=false # Whether to resolve the multipart request lazily at the time of file or parameter access.
感谢您的时间,您的回答很清楚,您说您建议在使用任何唯一id存储之前重命名文件,因此如果我想使用用户的is重命名文件,那么我必须从数据库开始,我的意思是保存用户获取其id,然后开始上载文件,使用id用户作为文件名?这是否正确?您不能将用户id用作新文件名。因为同一用户可以有多个文件。如果您需要用户id,您可以从会话或JWT令牌获得它,因为它是不可变的。
MULTIPART (MultipartProperties)
spring.servlet.multipart.enabled=true # Whether to enable support of multipart uploads.
spring.servlet.multipart.file-size-threshold=0B # Threshold after which files are written to disk.
spring.servlet.multipart.location= # Intermediate location of uploaded files.
spring.servlet.multipart.max-file-size=1MB # Max file size.
spring.servlet.multipart.max-request-size=10MB # Max request size.
spring.servlet.multipart.resolve-lazily=false # Whether to resolve the multipart request lazily at the time of file or parameter access.