Java 如何为我正在上传的文件指定一个随机文件名?

Java 如何为我正在上传的文件指定一个随机文件名?,java,spring,Java,Spring,我正在将一个文件上载到一个文件夹中,我已将文件名指定为“1.jpg”,因此当我上载一个新文件时,它将覆盖现有文件, 那么我如何给我上传的文件一个随机的文件名呢 我的上传代码在这里 @RequestMapping(value = "/event/uploadFile",headers=("content-type=multipart/*"), method = RequestMethod.POST,consumes ={"application/x-www-form-urlencoded"})

我正在将一个文件上载到一个文件夹中,我已将文件名指定为“1.jpg”,因此当我上载一个新文件时,它将覆盖现有文件, 那么我如何给我上传的文件一个随机的文件名呢

我的上传代码在这里

@RequestMapping(value = "/event/uploadFile",headers=("content-type=multipart/*"), method = RequestMethod.POST,consumes ={"application/x-www-form-urlencoded"})
    //String quote_upload=C:\fakepath\images.jpg
    public @ResponseBody
    String uploadFileHandler(

            @RequestParam MultipartFile file) {
        System.out.println("Creating the directory to store file");

        if (!file.isEmpty()) {
            try {
                byte[] bytes = file.getBytes();


                // Creating the directory to store file
                String rootPath = System.getProperty("catalina.home");
                File dir = new File(rootPath + File.separator + "tmpFiles");
                if (!dir.exists())
                    dir.mkdirs();

                // Create the file on server
                File serverFile = new File(dir.getAbsolutePath()
                        + File.separator+"1.jpg");
                BufferedOutputStream stream = new BufferedOutputStream(
                        new FileOutputStream(serverFile));
                stream.write(bytes);
                stream.close();

                System.out.println("************Server File Location="
                        + serverFile.getAbsolutePath());

                //return "You successfully uploaded file=" + name;
            } catch (Exception e) {
                System.out.println("************failes"+ e.getMessage());
                //return "You failed to upload " + name + " => " + e.getMessage();
            }
            //return "You failed to upload " + name
                    //+ " because the file was empty.";
        }
        System.out.println("hello");
        return "hello";
    }

如果你不希望这些名字有任何合理的顺序,我可能会同意。像这样的东西应该可以做到:

String filename = UUID.randomUUID().toString();

如果您担心UUID的唯一性,请查看。简而言之,您不太可能获得两个相同的ID。

如果您不希望名称有任何合理的顺序,我可能会同意。像这样的东西应该可以做到:

String filename = UUID.randomUUID().toString();
如果您担心UUID的唯一性,请查看。简而言之,您不太可能获得两个相同的ID。

您可以使用

Calendar.getInstance().getTimeInMillis();  
它将以毫秒为单位返回时间。
如果您对此不确定,请向其添加一些随机数。

您可以使用

Calendar.getInstance().getTimeInMillis();  
它将以毫秒为单位返回时间。
如果您对此不确定,请向其添加一些随机数

  • 为新上载的文件生成随机名称

    String fileName=UUID.randomUUID().toString()+您的文件扩展名

  • 检查您正在上载的目录中是否存在文件

    if(serverFile.exists())

  • 如果文件存在,请从步骤1重新开始,直到获得服务器中不存在的文件名

  • 注意:这不是最佳解决方案,但可以满足您的要求

  • 为新上载的文件生成随机名称

    String fileName=UUID.randomUUID().toString()+您的文件扩展名

  • 检查您正在上载的目录中是否存在文件

    if(serverFile.exists())

  • 如果文件存在,请从步骤1重新开始,直到获得服务器中不存在的文件名

  • 注意:这不是最佳解决方案,但可以满足您的要求。

    您可以使用:

    File.createTempFile(String prefix, String suffix, File directory)
    
    作为缔约国:

    在指定目录中创建新的空文件,使用给定的前缀和后缀字符串生成其名称。如果此方法成功返回,则可以保证:

  • 在调用此方法之前,由返回的抽象路径名表示的文件不存在,并且
  • 在虚拟机的当前调用中,此方法及其任何变体都不会再次返回相同的抽象路径名
  • 您可以使用:

    File.createTempFile(String prefix, String suffix, File directory)
    
    作为缔约国:

    在指定目录中创建新的空文件,使用给定的前缀和后缀字符串生成其名称。如果此方法成功返回,则可以保证:

  • 在调用此方法之前,由返回的抽象路径名表示的文件不存在,并且
  • 在虚拟机的当前调用中,此方法及其任何变体都不会再次返回相同的抽象路径名

  • 您只需获取一个随机大整数,并为文件命名,如下所示:

    String fileExtension = ".jpg";
    String fileName = Integer.toString(new Random().nextInt(1000000000)) + fileExtension;
    

    您只需获取一个随机大整数,并为文件命名,如下所示:

    String fileExtension = ".jpg";
    String fileName = Integer.toString(new Random().nextInt(1000000000)) + fileExtension;
    

    一个选项是从
    random
    附加当前时间(最多秒)和随机数生成器。您可以使用
    java.util.UUID.randomUUID()
    方法为
    serverFile
    创建唯一名称一个选项是附加当前时间(最多秒)和来自
    random
    的随机数生成器。您可以使用
    java.util.UUID.randomuid()
    方法为
    serverFile
    创建唯一名称,这可能会导致重复。。nextInt可以返回重复的值。这可能导致重复。。nextInt可以返回重复的值。。