Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更改多部分文件的原始文件名_Java_Multipartform Data - Fatal编程技术网

Java 如何更改多部分文件的原始文件名

Java 如何更改多部分文件的原始文件名,java,multipartform-data,Java,Multipartform Data,我在服务器端有一个多部分文件。我想更改此文件的原始文件名,但该类仅支持getOriginalFilename() 有人能帮我吗?PS:这是一个上传的图像文件 非常感谢。您可以使用MockMultipartFile类更改名称。 例如,向多部分文件添加时间戳 MultipartFile multipartFile = new MockMultipartFile(FilenameUtils.getBaseName(oldMultipartFile.getOriginalFilename()).con

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

有人能帮我吗?PS:这是一个上传的图像文件


非常感谢。

您可以使用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
}