我在服务器端有一个MultipartFile文件。我想更改此文件的原始文件名,但该类仅支持getOriginalFilename()。
任何人都可以帮我吗? PS:这是上传的图片文件。
非常感谢。
答案 0 :(得分:3)
您可以使用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())
答案 1 :(得分:0)
只需通过更新
来创建一个新的MultipartFile实例。originalFileName
添加了一个新文件,而这些文件具有相同的现有文件字段。
只需将以下方法称为
getNewFile(“ newFileName”,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 {
}
};
}
答案 2 :(得分:0)
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
}