Docusign从模板下载文件,该文件使用Chilkat和Rest API获取base64string格式的非法字符

问题描述

我可以从传递模板id和documentid的模板中获取文件,当从api重新运行时,我将获得base64string格式,并且当我尝试将其转换为字节时,

我收到一条错误消息“其他信息:输入不是有效的Base-64字符串,因为它包含非Base 64字符,两个以上的填充字符或填充字符中的非法字符。”

这是我用来从模板下载文件代码

    Dim rest As New Chilkat.Rest
    Dim success As Boolean
    Dim bTls As Boolean = True
    Dim port As Integer = 443
    Dim bAutoReconnect As Boolean = True
    success = rest.Connect("demo.docusign.net",port,bTls,bAutoReconnect)
    If (success <> True) Then
        Debug.WriteLine("ConnectFailReason: " & rest.ConnectFailReason)
        Debug.WriteLine(rest.LastErrorText)
        Exit Sub
    End If


    rest.AddHeader("X-DocuSign-Authentication","{ ""Username"":    ""[email protected]"",""Password"":""DocuSign_password"",""IntegratorKey"":""DocuSign_Integrator_Key"" }")

    Dim sbResponseBody As New Chilkat.StringBuilder
    
    success = rest.FullRequestNoBodySb("GET","/restapi/v2.1/accounts/xxxx/templates/xxxx-xxxx-xxxx-xxxx-xxxx/documents/x",sbResponseBody)
    
    If (success <> True) Then
        Debug.WriteLine(rest.LastErrorText)
        Exit Sub
    End If

    Dim respStatusCode As Integer = rest.ResponseStatusCode
    If (respStatusCode >= 400) Then
        Debug.WriteLine("Response Status Code = " & respStatusCode)
        Debug.WriteLine("Response Header:")
        Debug.WriteLine(rest.ResponseHeader)
        Debug.WriteLine("Response Body:")
        Debug.WriteLine(sbResponseBody.GetAsstring())
        Exit Sub
    End If
    Dim jsonResponse As New Chilkat.JsonObject
    jsonResponse.LoadSb(sbResponseBody)
    Dim pdfBytes As Byte() = Convert.FromBase64String(sbResponseBody.ToString)

关于, Aravind

解决方法

我将我的代码从chilkat dll更改为Docusing dll 3.0.0,使用docusing dll可以从信封中下载文件,在这里我经过我的代码,这对其他开发人员很有用。我使用了.net Framework代码下载文件来自文件流。

Private Function DoWnload(ByVal accessToken As String,ByVal basePath As String,ByVal accountId As String,ByVal envelopeId As String,ByVal documents As List(Of EnvelopeDocItem),ByVal docSelect As String) As String
    Dim config = New Configuration(New ApiClient(basePath))
    config.AddDefaultHeader("Authorization","Bearer " & accessToken)
    Dim envelopesApi As EnvelopesApi = New EnvelopesApi(config)
    Dim results As System.IO.Stream = envelopesApi.GetDocument(accountId,envelopeId,docSelect)
    Dim docItem As EnvelopeDocItem = documents.FirstOrDefault(Function(d) docSelect.Equals(d.DocumentId))
    Dim docName As String = docItem.Name
    Dim hasPDFsuffix As Boolean = docName.ToUpper().EndsWith(".PDF")
    Dim pdfFile As Boolean = hasPDFsuffix
    Dim docType As String = docItem.Type

    If ("content".Equals(docType) OrElse "summary".Equals(docType)) AndAlso Not hasPDFsuffix Then
        docName += ".pdf"
        pdfFile = True
    End If

    If "zip".Equals(docType) Then
        docName += ".zip"
    End If

    Dim mimetype As String

    If pdfFile Then
        mimetype = "application/pdf"
    ElseIf "zip".Equals(docType) Then
        mimetype = "application/zip"
    Else
        mimetype = "application/octet-stream"
    End If
    Dim bytesRead As Integer
    Dim buffer(4096) As Byte

    Using outFile As New System.IO.FileStream("C:\File.pdf",IO.FileMode.Create,IO.FileAccess.Write)
        Do
            bytesRead = results.Read(buffer,buffer.Length)
            If bytesRead > 0 Then
                outFile.Write(buffer,bytesRead)
            End If
        Loop While bytesRead > 0
    End Using
    Return ""

End Function

Dim envelopeDocItems As List(Of EnvelopeDocItem) = New List(Of EnvelopeDocItem) From {
New EnvelopeDocItem With {
    .Name = "Combined",.Type = "content",.DocumentId = "combined"
},New EnvelopeDocItem With {
    .Name = "Zip archive",.Type = "zip",.DocumentId = "archive"
}

感谢Inbar Gazit ...

感谢和问候, Aravind