如何将一个随机文件名提供给文件,我正在上传?

时间:2017-06-14 04:49:58

标签: java spring

我正在将文件上传到文件夹,我将文件名称为“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";
    }

5 个答案:

答案 0 :(得分:2)

如果你不希望这些名字有任何合理的顺序,我可能会选择UUID。这样的事情应该这样做:

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

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

答案 1 :(得分:2)

您可以使用

Calendar.getInstance().getTimeInMillis();  

它将以毫秒为单位返回时间 如果你不确定这会给它添加一些随机数。

答案 2 :(得分:2)

您可以使用:

MATCH (r:Person {name:'Jon'})
MATCH (s:Person {name:'Ana'})
MERGE (r)-[:FRIEND_OF]->(s)

正如JavaDoc所述:

  

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

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

答案 3 :(得分:1)

  1. 为新上传的文件生成随机名称

    reshape2

  2. 检查您上传的目录中是否存在文件

    String fileName = UUID.randomUUID().toString()+YOUR_FILE_EXTENSION;

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

  4. 注意:这不是最佳解决方案,但会满足您的要求。

答案 4 :(得分:0)

您可以简单地获取一个随机的大整数,并为您的文件命名,如下所示:

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