如何更改MultipartFile的originalFilename

时间:2016-03-10 10:45:25

标签: java multipartform-data

我在服务器端有一个MultipartFile文件。我想更改此文件的原始文件名,但该类仅支持getOriginalFilename()。

任何人都可以帮我吗? PS:这是上传的图片文件。

非常感谢。

3 个答案:

答案 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
}