java - 使用 Apache Commons HttpClient 上传 SmbFile

标签 java apache-commons-httpclient jcifs

我一直在尝试使用 Apache Commons HttpClient 上传 SmbFile,现有系统使用 org.​apache.​commons.​httpclient.​methods.​multipart.FilePart对于 native java.io.File,我需要修改它以支持 smbfile,但 FilePart 和 FilePartSource 似乎都接受 java.io.File仅有的。有什么办法可以转换 jcifs.smb.SmbFilejava.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/

相关文章:

java - 从数字签名中获取公钥

java - (apache httpclient) 3 段代码有什么不同?

java - ReSTLet 向服务器发送 "get"请求并处理响应

java - 绕过 DNS 查找并将 URL 提交给代理

java - 在 Android 上使用 JCIFS 库时在 URL 中使用 SMB 协议(protocol)

java - 安卓 : openConnection() throws IOExeption ( Unable to find default handler for protocol: http )

java - Java中如何获取GUI组件的名称?

java - 循环而不为扫描仪创建新变量?

java - Navigation Drawer - syncState() 做什么以及为什么应该在 onPostCreate() 中调用它?