我一直在尝试使用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已经发生。指定的登录会话不存在。它可能已经被终止。
如果提供的信息不充分,请发表评论。
答案 0 :(得分:2)
最后,我找到了使工作顺利的解决方法,我正在为来这里寻找答案的人分享这个。
截至目前,没有直接的方法可用(如果我错了,请纠正我)。我知道的唯一方法是使用。
创建一个SmbFileSmbFile 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上传您的文件。
任何人都有比这更好的方法,请随时发布。