使用Apache Commons HttpClient上传SmbFile

时间:2014-08-04 06:27:13

标签: java apache-commons-httpclient jcifs

我一直在尝试使用Apache Commons HttpClient上传SmbFile,现有系统使用org.​apache.​commons.​httpclient.​methods.​multipart.FilePart和原生java.io.File,我需要修改它以支持smbfile,但FilePart和FilePartSource似乎都接受{{1 }} 只要。我有没有办法将java.io.File投射到jcifs.smb.SmbFile,还是有其他解决方法来实现这一目标?

更新 我正在进行此编辑,以全面了解我的要求,以便对尝试回答的人有用。

我想将驻留在共享文件服务器中的文件上传到某个HTTP URL。如前所述,现有系统使用Apache Commons HttpClient来实现这一点,但不幸的是它需要Native IO文件。我无法创建Native IO文件对象,因为该文件位于受密码保护的文件服务器内。我做了一个解决方法,通过创建本机文件对象在Windows中使用NET命令连接网络驱动器。但是这种方法不一致,因为有时我得到系统错误1312已经发生。指定的登录会话不存在。它可能已经被终止。

如果提供的信息不充分,请发表评论。

1 个答案:

答案 0 :(得分:2)

最后,我找到了使工作顺利的解决方法,我正在为来这里寻找答案的人分享这个。

截至目前,没有直接的方法可用(如果我错了,请纠正我)。我知道的唯一方法是使用。

创建一个SmbFile
SmbFile smbFile = new SmbFile(filePath, ntlmAuth);

然后,使用

从smbFile创建输入流
InputStream is = new SmbFileInputStream(smbFile);

使用Apache Commons IOUtils将inputstream转换为字节数组(也可以使用其他方法,我的选择是Apache)。

byte[] fileBytes = IOUtils.toByteArray(is);

创建ByteArrayPartSource对象,

PartSource ps = new ByteArrayPartSource(fileName, fileBytes);

然后可以使用partsource对象创建FilePart。

new FilePart("uploadedFile", ps);

Voila,现在您可以使用Apache Commons HttpClient上传您的文件。

任何人都有比这更好的方法,请随时发布。