使用 java.nio.file.Files.copy() 从 Linux 将文件复制到 Windows 远程机器

Copy a file to a Windows remote machine from Linux using java.nio.file.Files.copy()

我正在开发 Spring 引导应用程序,我需要将文件复制到远程计算机。

当我在 Windows 机器上 运行 程序时,它工作正常。这是代码:

void copyImage(MultipartFile image, String name) {

    name = name + "." + FileUtils.getExtension(image);

    Path path = Paths.get("\<remote-machine>\path\to\repository\" + name);

    try {
        Files.copy(image.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING);
    } catch (IOException e) {
        // Handle exception here
    }
}

不出所料,当我在 Linux (Pop!_OS) 上 运行 该程序无法运行。我认为传递给 Paths.get() 的参数格式不正确,因为 Windows 和 Linux 对待路径的方式不同。知道如何让这个方法在 Linux 上工作吗?

Linux 本身不支持 UNC paths - 它不理解这样的路径是指网络共享。您有多种选择:

  • 使用 Java 库,该库使用 SMB 协议实现网络共享访问。一些积极支持的库是 JCIFS and SMBJ。这应该使您的应用程序可移植(您可以 运行 它在 Linux 和 Windows 上),但是您依赖于一个额外的库并且必须使用它的自定义 API 来访问远程文件
  • 将远程共享作为 CIFS 卷 (official Ubuntu guide) 安装在 Linux 上。然后远程共享变得可访问,就好像它是 Linux 上的本地目录一样。在这种情况下,您可以继续使用 java.nio 到 access/copy 文件,但需要确保使共享的根路径可配置(例如 \host\share on Windows 和 /mnt/share 在 Linux).