为什么我无法使用VB.Net/dotCMIS.dll从多个OpenCMS文档中获取内容流?

时间:2015-09-22 02:40:48

标签: vb.net opencmis

我使用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
        ...

1 个答案:

答案 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