我一直在尝试使用 Apache Commons HttpClient 上传 SmbFile,现有系统使用 org.apache.commons.httpclient.methods.multipart.FilePart
对于 native java.io.File,我需要修改它以支持 smbfile,但 FilePart 和 FilePartSource 似乎都接受 java.io.File
仅有的。有什么办法可以转换 jcifs.smb.SmbFile
至java.io.File
或者有其他解决方法可以实现此目的吗?
更新: 我进行此编辑是为了全面了解我的要求,以便它可能对尝试回答的人有用。
我想将共享文件服务器中的文件上传到某个 HTTP URL。如前所述,现有系统使用 Apache Commons HttpClient 来实现此目的,但不幸的是它需要 Native IO 文件。我无法创建 native IO 文件对象,因为该文件位于受密码保护的文件服务器内。我做了一个解决方法,通过创建 native 文件对象,在 Windows 中使用 NET 命令连接网络驱动器。但是这种方法并不一致,因为有时我会收到系统错误 1312 已发生。指定的登录 session 不存在。它可能已经被终止。
如果提供的信息不充分,请发表评论。
最佳答案
最后,我找到了使事情正常进行的解决方法,我将其分享给来这里寻找答案的人。
到目前为止,没有直接的方法可用(如果我错了,请纠正我)。我知道完成这项工作的唯一方法是使用创建一个 SmbFile。
SmbFile smbFile = new SmbFile(filePath, ntlmAuth);
然后,使用 smbFile 创建输入流,
InputStream is = new SmbFileInputStream(smbFile);
使用 Apache Commons IOUtils 将输入流转换为字节数组(也可以使用其他方法,我选择的是 Apache)。
byte[] fileBytes = IOUtils.toByteArray(is);
创建ByteArrayPartSource对象,
PartSource ps = new ByteArrayPartSource(fileName, fileBytes);
然后可以使用partsource对象创建FilePart。
new FilePart("uploadedFile", ps);
瞧,现在您可以使用 Apache Commons HttpClient 上传文件了。
任何人有比这更好的方法,请随时发帖。
关于java - 使用 Apache Commons HttpClient 上传 SmbFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25112870/