我使用OpenCMIS dotCMIS库从符合CMIS的存储库中读取文档。
我有并行的Java / Chemistry和VB.Net/dotCMIS测试程序与同一个FileNet fncmis存储库进行通信。
我可以在Java或VB.Net中连接,查询,获取文档。
问题:在VB.Net中,我只能阅读第一个文档中的内容。第二个和后续文档给我一个内容流......但我得到的是零字节。 Java工作得很好。 VB.Net在第一个文档后失败。
没有编译警告或运行时异常。
问题:你能看到后续调用DisplayDocument()
的零字节有什么原因吗?
我使用的是最新版本的dotCMIS,版本0.7。
Option Explicit On
Imports DotCMIS.Client
Imports DotCMIS.SessionParameter
...
Public Sub DisplayDocument(ByVal document As IDocument)
...
' Open stream to document content and copy to a file
Dim contentStream As DotCMIS.Data.IContentStream = document.GetContentStream()
sFilePath = "c:\temp\" & contentStream.FileName
Using fis = contentStream.Stream
Using fos = New System.IO.FileStream(sFilePath, IO.FileMode.OpenOrCreate)
Dim buffer(2048) As Byte
Do While (i = fis.Read(buffer, 0, buffer.Length) > 0)
fos.Write(buffer, 0, i)
Loop
End Using
End Using
...
答案 0 :(得分:0)
问题解决了!
回想起来,它与OpenCMIS无关,也与.Net流无关:我打开.Net输出流时忘了指定IO.FileAccess.Write
。
以下是更正后的代码:
' Open stream to document content and copy to a file
Dim contentStream As IContentStream = document.GetContentStream()
sFilePath = "c:\temp\" & contentStream.FileName
Using fis = contentStream.Stream
Using fos = New System.IO.FileStream(sFilePath, IO.FileMode.Create, IO.FileAccess.Write)
Dim buffer(2048) As Byte
Do
i = fis.Read(buffer, 0, buffer.Length)
If i > 0 Then fos.Write(buffer, 0, i)
Loop While i > 0
End Using
End Using