Java 如何更改多部分文件的原始文件名
我在服务器端有一个多部分文件。我想更改此文件的原始文件名,但该类仅支持getOriginalFilename() 有人能帮我吗?PS:这是一个上传的图像文件Java 如何更改多部分文件的原始文件名,java,multipartform-data,Java,Multipartform Data,我在服务器端有一个多部分文件。我想更改此文件的原始文件名,但该类仅支持getOriginalFilename() 有人能帮我吗?PS:这是一个上传的图像文件 非常感谢。您可以使用MockMultipartFile类更改名称。 例如,向多部分文件添加时间戳 MultipartFile multipartFile = new MockMultipartFile(FilenameUtils.getBaseName(oldMultipartFile.getOriginalFilename()).con
非常感谢。您可以使用MockMultipartFile类更改名称。 例如,向多部分文件添加时间戳
MultipartFile multipartFile = new MockMultipartFile(FilenameUtils.getBaseName(oldMultipartFile.getOriginalFilename()).concat(new SimpleDateFormat("yyyyMMddHHmm").format(new Date())) + "." + FilenameUtils.getExtension(oldMultipartFile.getOriginalFilename()), oldMultipartFile.getInputStream());
然后使用新名称的multipartFile
或者,您可以在像这样保存之前重命名文件
String currentDate = new SimpleDateFormat("yyyyMMddHHmm").format(new Date());
file.getOriginalFilename().replace(file.getOriginalFilename(), FilenameUtils.getBaseName(file.getOriginalFilename()).concat(currentDate) + "." + FilenameUtils.getExtension(file.getOriginalFilename())).toLowerCase())
只需通过更新其 原始文件名 使用新的一个或多个具有相同现有文件字段的文件 只需将以下方法调用为 getNewFile(“新文件名”,currentFile) 当前文件是现有文件的MultipartFile对象
private MultipartFile getNewFile(String fileName, MultipartFile currentFile){
return new MultipartFile() {
@Override
public String getName() {
return currentFile.getName();
}
@Override
public String getOriginalFilename() {
return fileName;
}
@Override
public String getContentType() {
return currentFile.getContentType();
}
@Override
public boolean isEmpty() {
return currentFile.isEmpty();
}
@Override
public long getSize() {
return currentFile.getSize();
}
@Override
public byte[] getBytes() throws IOException {
return currentFile.getBytes();
}
@Override
public InputStream getInputStream() throws IOException {
return currentFile.getInputStream();
}
@Override
public void transferTo(File file) throws IOException, IllegalStateException {
}
};
}
是否要为上载文件指定一个新名称并保存它?您无法更改
多文件的原始名称。但是您可以用另一个名称保存此文件,此时将传递file
到transferTo()
方法。第二个答案不正确。我们不能像那样直接替换原来的名字。我们需要将替换的结果存储在变量中。
public String storeFile(MultipartFile file) {
String fileName = StringUtils.cleanPath(file.getOriginalFilename());
//this will provide the complete filename, let "file.txt";
File fileSaved = fileRepository.save(new File());
//let's save that on a repo, not file, just some reference, easy to handle
fileName = fileName.substring(0, fileName.length() - 4) + fileSaved.getFileId() + fileName.substring(fileName.length() - 4);
//change the file name a bit, just put the id from the repo, it will be unique by default, right ? and what's that 4 - ".txt" has 4 alphabets, currently i neeed to handle only txt, so I hard-coded this
Path targetLocation = this.fileStorageLocation.resolve(fileName);
Files.copy(file.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);
//it will be never replaced, even filenames are same,id will be unique
}