我最近继承了一个 Java API,但在上传文件时遇到了问题。 不幸的是,Java 不是一种我有很多经验的语言,所以我对此感到有些困惑。

MultiPartFile接收正常,我可以在临时目录中找到该文件,但是当我尝试使用 File.transferTo() 创建最终文件时,我只会收到以下错误;

java.nio.file.NoSuchFileException: C:\\Users\\myUser\\AppData\\Local\\Temp\\undertow3706399294849267898upload -> S:\\Dev\\PolicyData\\Temp.xlsx

正如我提到的 temp undertow 文件存在,并且 S 驱动器上的目录也存在,(但没有 Temp.xlsx,因为我的理解是这应该由transferTo()创建)。 到目前为止,我找到的任何解决方案都是使用绝对文件路径解决的。

这是代码的简化版本,但错误保持不变。

SpringBoot 框架为“1.5.3.RELEASE”,运行 Java 1.8.0_131

    ResponseEntity handleFileUpload(@RequestPart(name = "file") MultipartFile file, @PathVariable Long stageFileTypeId) {
    if (!file.isEmpty()) {
        try {
            String filePath = "S:\\Dev\\PolicyData\\Temp.xlsx";
            log.info("Upload Path = {}", filePath);

            File dest = new File(filePath);
            file.transferTo(dest);

            return ResponseUtil.wrapOrNotFound(Optional.ofNullable(filePath));
        }
        catch (Exception ex) {
            log.error("An error has occurred uploading the file", ex);
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
        }
    }
    else {
        log.error("An error has occurred, no file was received");
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
    }
}

如果您需要更多信息,请告诉我。

谢谢,尼尔

#1楼 票数:1 已采纳

MultipartFile 的 API 有点棘手。 transferTo(File) 方法 javadoc 指出(粗体是我的):

这可能会移动文件系统中的文件,复制文件系统中的文件,或者将内存中的内容保存到目标文件中。 如果目标文件已经存在,则首先将其删除。

如果目标文件已在文件系统中移动,则此操作之后无法再次调用 因此,只需调用一次此方法即可使用任何存储机制。

似乎 Undertow 实现已经调用它将内存中上传的文件移动到“C:\\Users\\myUser\\AppData\\Loca\\Temp\\undertow3706399294849267898upload”,因此另一个 transferTo 失败。

我在带有 Undertow 的 Wildfly 容器中使用 javax.servlet.http.Part 遇到了同样的问题。

如果您使用的是 Spring 框架 >= 5.1,您可以尝试 Multipart.transferTo(Path) 方法,使用dest.toPath()

或者您可以从 inputStream 复制,如下所示:

try (InputStream is = multipartFile.getInputStream()) {
    Files.copy(is, dest.toPath());
}

  ask by Neil translate from so

未解决问题?本站智能推荐:

1回复

java.nio.file.NoSuchFileException:

我正在尝试使用loadPlayerDataFromFile方法从文件加载文本中的应用程序数据: 当我尝试运行该应用程序时,它显示以下错误消息: java.nio.file.NoSuchFileException:C:\\ Users \\%d0%90%d0%bb%d0%b5%d0%ba
4回复

如何解决java.nio.file.NoSuchFileException?

我有一个名为“result.csv”的文件,我想从该文件中读取某些数据并显示它们。 我的 eclipse 项目文件夹中有该文件。 我仍然无法读取文件。 输出: 谁能指出我到底错过了什么? 我怎样才能克服这种方法或这种方法的任何替代方法?
1回复

Java.nio.file.NoSuchFileException但文件退出

我正在尝试从文件夹中读取文件。 该文件夹中有 >1000 个文件,我尝试使用ScheduledThreadPoolExecutor.scheduleWithFixedDelay()每 10 秒读取 100 个文件Files.list(Paths.get(path)).sorted().limi
1回复

AsynchronousFileChannel抛出java.nio.file.NoSuchFileException

我正在使用java nio 2,并且编写了一个简单的应用程序,该应用程序应创建一个文件并向其中写入内容,但是我得到的文件不存在异常
1回复

java.nio.file.NoSuchFileException:为什么nio不创建文件[关闭]

关闭。 这个问题需要调试细节。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其成为 Stack O
1回复

Java抛出java.nio.file.NoSuchFileException,但文件存在

我正在 docker 容器中运行 Spring REST 应用程序。 我在 Spring 控制器中有一个用于保存图像的函数和一个用于读取图像的函数。 保存功能正常工作,但我对读取它们的功能有疑问: 但是,在使用上述函数后,我收到此错误java.nio.file.NoSuchFileException
1回复

java.nio.file.NoSuchFileException在java中删除文件时

在删除文件时,我得到 java.nio.file.NoSuchFileException 下面是我的代码 sinippet。问题是它被多次调用,同一个文件被删除。 这是堆栈跟踪
2回复

OpenJdk上的getResource抛出java.nio.file.NoSuchFileException

应用:Spring Boot, 图片:OpenJDK 8, PaaS: Openshift, 包装:罐子, 错误:没有这样的文件错误。 java.nio.file.NoSuchFileException 文件位置:/servicename/src/main/resources/cert/trus