1

Тема: Как с NotesMIMEEntity кодировать в base64 NotesStream?

Не получается загнать в string содержимое mime.
Не понятно, на какое поле указывает Set mime = doc.GetMIMEEntity
Вот пример кнопочки:

Sub Click(Source As Button)
   
    Dim s As New NotesSession
    Dim doc As NotesDocument
    Dim mime As NotesMIMEEntity
    Dim uiworkspace As New NotesUIWorkspace   
    Set doc =uiworkspace.CurrentDocument.Document
   
    Dim stream As NotesStream
    Set stream = s.CreateStream
    Call stream.WriteText("Te2xt of mes2sage.")
   
    s.ConvertMIME = False ' Do not convert MIME to rich text
   
    Set mime = doc.GetMIMEEntity
    If Not(mime Is Nothing) Then
        Call mime.DecodeContent()
        Call mime.SetContentFromText (stream, "text/plain;charset=UTF-8", ENC_BASE64)
        Call mime.EncodeContent(base64)
    End If
   
    'Call doc.Save(True, True)
   
    s.ConvertMIME = True ' Restore conversion
End Sub

Я так понял, что можно создавать MIME хранилища, Data Type: MIME Part.

Поделиться

2

Re: Как с NotesMIMEEntity кодировать в base64 NotesStream?

Поделиться

3

Re: Как с NotesMIMEEntity кодировать в base64 NotesStream?

В итоге нашел libBase64 библиотеку на лотускрипте.
Use "libBase64"
Dim b64 As New CBase64()
plainText$ =  b64.encode (inStream)


А вот и сама функция!

Function encode (nsIn As NotesStream) As String
        Dim dwStart As Long
'        dwStart = timerStart()
       
        Dim session As New NotesSession
        Dim docTemp As NotesDocument
        Dim body As NotesMimeEntity
       
        Set docTemp = session.CurrentDatabase.CreateDocument
        Set body    = docTemp.CreateMIMEEntity
       
        session.ConvertMIME = False
        Call body.SetContentFromBytes (nsIn, "", ENC_NONE)
        Call body.EncodeContent (ENC_BASE64)
       
        encode = body.ContentAsText
       
        If Not bMimeModeEncoding Then
            Call Me.removeWhitespace (encode)
        End If
'        Print timerElapRateString (dwStart, "encodeToString", .001*nsIn.Bytes, "kBytes")
    End Function

Sub removeWhitespace (s As String)
        ' Remove CR, LF, tab and space
    Dim aFind(3) As String
    aFind(0) = Chr(13)
    aFind(1) = Chr(10)
    aFind(2) = Chr(9)
    aFind(3) = " "
    s = Replace (s, aFind, "")
End Sub

Поделиться

4

Re: Как с NotesMIMEEntity кодировать в base64 NotesStream?

Вот итоговый агент , который в пеерменную  вариант encode  закидывает вложение в Base64 кодировке.


Sub Click(Source As Button)
   
    Dim session As New NotesSession
    Dim uiworkspace As New NotesUIWorkspace       
    Dim histold As String   
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Set uidoc =uiworkspace.CurrentDocument
    Set doc =uidoc.Document
    datapatch$ = {C:\out\}
    Dim rtitem As NotesRichTextItem
    Set rtitem = doc.GetFirstItem( "ПРИЛОЖЕНИЯ_" )
   
   
    Dim inStream As NotesStream
    Set inStream=session.Createstream() ' сохряненный файл на винте   
   
    Forall obj In rtitem.EmbeddedObjects
        If ( obj.Type = EMBED_ATTACHMENT ) Then
            Call obj.ExtractFile( datapatch$ & obj.Source )
            oname$ = obj.Source
            Call inStream.Open(datapatch$ & oname$, "binary")    ' в поток inStream файл   
           
            Dim dwStart As Long
            Dim docTemp As NotesDocument
            Dim body As NotesMimeEntity
            Set docTemp = session.CurrentDatabase.CreateDocument
            Set body    = docTemp.CreateMIMEEntity
            session.ConvertMIME = False
            Call body.SetContentFromBytes (inStream, "", ENC_NONE)
            Call body.EncodeContent (ENC_BASE64)
           
            encode = body.ContentAsText
           
            Dim aFind(3) As String
            aFind(0) = Chr(13)
            aFind(1) = Chr(10)
            aFind(2) = Chr(9)
            aFind(3) = " "
            encode = Replace (encode, aFind, "")
           
            Print "УРА!"
            Call inStream.Close
            Kill     datapatch$ & oname$    ' стереть файл           
            Print "Выгрузили!"
        End If
    End Forall
End Sub

Поделиться