【问题标题】:How to create temp directory in heroku/docker using Java?如何使用 Java 在 heroku/docker 中创建临时目录?
【发布时间】:2021-07-23 09:14:14
【问题描述】:

我正在尝试创建一个临时文件并生成一个文件名,然后保存一个多部分文件。我正在使用 Spring Boot,以下代码在本地工作。但在 heroku 或 docker 中,它正在抛出 FileNotFoundException;那么如何创建一个临时目录并将文件保存在 docker/heroku 的该临时目录中呢? 或者将multipart 文件保存到服务器中的临时文件夹的最佳方法是什么? 有人可以帮助我吗?提前致谢。

File tempDirectory = new File(new File(System.getProperty("java.io.tmpdir")), "files");

   if (!tempDirectory.exists()) {
       tempDirectory.mkdir();
   }

String filePath = new File(tempDirectory.getAbsolutePath() + "/temp.pdf").getAbsolutePath();

【问题讨论】:

  • 可能与实际上没有创建文件有关吗?也许是文件创建问题?另外,是否会阻止使用“.exe”扩展名创建文件?
  • 我对你的temp.exe 感到困惑。最新的 Heroku 堆栈是 Ubuntu 20。Linux 不理解 .exe 文件。尝试打印出tempDirectory 并查看路径是否存在,或者您可以调整您的Procfile 并添加-Djava.io.tmpdir=\tmp。将mkdir() 更改为mkdirs(),这样如果缺少父目录,它也会创建父目录。您已经展示了如何获取filePath 字符串的代码,但是您如何在系统上创建文件。它在本地工作,所以应该有它的代码。

标签: java spring-boot docker heroku temp


【解决方案1】:
 File tempDirectory = new File(new File(System.getProperty("java.io.tmpdir")), "files");
        if(tempDirectory.exists()){
            System.out.println("something");
        }else{
            tempDirectory.mkdirs();
        }

        File file = new File(tempDirectory.getAbsolutePath()+"/abcd.txt");
        if(!file.exists()){
            file.createNewFile();
        }
        String file2= new File(tempDirectory.getAbsolutePath()+"/something.txt").getAbsolutePath();


        System.out.println(file2);

在我的最后工作完全正常。您可能遇到的唯一问题是

String filePath = new File(tempDirectory.getAbsolutePath() + "/temp.exe").getAbsolutePath();

这不会在您创建的临时目录中创建文件。如果要保存在提到的目录中,它只会返回绝对路径。这可能是您没有找到错误的原因。尝试使用实际保存

file.transferTo(wherefileneedstobesavedlocation);

【讨论】:

  • 非常感谢您的回答和您的宝贵时间。
猜你喜欢
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
相关资源
最近更新 更多