如何解决使用 java.nio.file.Files.copy() 将文件从 Linux 复制到 Windows 远程机器
我正在开发 Spring Boot 应用程序,我需要将文件复制到远程机器。
当我在 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 - 它不明白这样的路径是指网络共享。您有多种选择:
- 使用通过 SMB 协议实现网络共享访问的 Java 库。一些积极支持的库是 JCIFS 和 SMBJ。这应该使您的应用程序可移植(您可以在 Linux 和 Windows 上运行它),但您依赖于一个额外的库,并且必须使用其自定义 API 来访问远程文件
- 在 Linux 上将远程共享挂载为 CIFS 卷 (official Ubuntu guide)。然后远程共享就可以访问了,就好像它是 Linux 上的本地目录一样。在这种情况下,您可以继续使用
java.nio
访问/复制文件,但需要确保将共享的根路径设为可配置(例如,Windows 上的\\host\share
和 Linux 上的/mnt/share
).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。