'Create Inline Image in a RichText Item from an Agent

I'm trying to write an Agent which is run via an xmlhttprequest and accepts a UNID and a Base64 encoded image as paramater.

What i'm up for is that the agent decodes the base64 string and writes it as an inline Image into a RichText Field

I tried writing the base64 encoded string to a Stream, then creating a MimeEntity with a Child Entity and set the content from the stream, Then get the MimeEntity Item and Append it to the RichTextItem

.
.
.
Call stream.Writetext(data)
.
Set body = doc.CreateMIMEEntity("RT")   


Set header = body.CreateHeader("Content-Type") 
Call header.SetHeaderVal("multipart/mixed")
.
Set child = body.CreateChildEntity() 
Call child.Setcontentfrombytes(stream, "image/jpeg", 1727) 
Call child.Decodecontent()
.
Call RT.AppendRTItem(MimeEntityItem)

But I end up with a 6400byte image/jpeg file And now i don't get any further

Does anybody has any clues on how to get something like this working ? Thanks in Advance =)

Edit:

Ok, i figured it just creates a file with the valid base64 string but it doesn't get decoded


Ok now i got at least this far:

  Option Public
  Option Declare

  Sub Initialize

      Dim session As NotesSession
      Dim doc As NotesDocument
      Dim query_string As String
      Dim params As Variant
      Dim i As Integer
      Dim db As NotesDatabase
      Set session = New NotesSession
      Set doc = session.DocumentContext
      query_string = doc.QUERY_STRING(0)

  On Error GoTo errorrt
      params = Split (query_string,"&")

      Print("<html><head></head><body>")

      Print params(1);
      Print("<br>")
      Print ({<img src="data:image/png;base64,} & params(2) & {"></img>})
      Set db = session.Currentdatabase
      Set doc = db.Getdocumentbyunid(params(1))
      If doc Is Nothing Then
          Print ("Ne")
      End If
      Print (doc.Getitemvalue("tatkun")(0))
      Print ("</body></html>")

      Call AttachSignature(doc,params(2),"signature")

      Exit Sub
  errorrt:
      Print (Error & " " & erl)
      Exit Sub
  End Sub


  Function AttachSignature(doc As NotesDocument, data As Variant, filename As String) As Boolean

  AttachSignature = False

  Dim session As New NotesSession
  Dim db As NotesDatabase
  Dim body As NotesMIMEEntity
  Dim header As NotesMIMEHeader
  Dim child As NotesMIMEEntity
  Dim stream As NotesStream
  Dim fileType As String
  Dim rt1 As NotesRichTextItem
  Dim rt2 As NotesRichTextItem

  On Error GoTo ErrorRoutine

  Set db = doc.Parentdatabase
  Set stream = session.CreateStream

  Call stream.Writetext(data) 'Write the Data to the Stream


  If doc.Getitemvalue("SignatureAttached")(0) = "1" Then
      Exit Function
  End If

  Set body = doc.CreateMIMEEntity("TempRT")     

  Set header = body.CreateHeader("Content-Type") 
  Call header.SetHeaderVal("multipart/mixed")

  Call body.CreateHeader("Content-Disposition"). _
  SetheaderValAndParams({attachment; filename="} &filename & {"})


  Set child = body.CreateChildEntity()

  fileType = "image/jpeg"

      Call child.SetcontentfromText(stream, fileType, 1727) 
      Call stream.Close() 
      Call body.Decodecontent()

  Call doc.save(False, False)

  Set rt1 = doc.GetFirstItem("signature")
  Set rt2 = doc.GetFirstItem("TempRT")

  Call rt1.AppendRTItem( rt2 )
  Call rt2.Remove()

  doc.SignatureAttached = "1"

  Call doc.save(False, False)

  AttachSignature = True

  Exit Function

  ErrorRoutine:
   If Not rt2 Is Nothing Then
      Call rt2.Remove()
   End If 
   Print (Error & " " & Erl)
   Exit Function
  End Function

Which adds a valid image To the RichText item =)

But i don't get how i could make it an inline image. And the filename isn't correct too.

Again Thanx for any help =)



Solution 1:[1]

I believe you want to be using multipart/related instead of multipart/mixed, and assigning a Content-ID: header to the MIMEEntity that stores the iamge, and then using to reference the content ID in your image.

Solution 2:[2]

Hope this can solve.

Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    'Dim acl As NotesACL
    'Dim entry As NotesACLEntry
    Dim richStyle As NotesRichTextStyle
    Dim rtitem As NotesRichTextItem
    Set db = session.CurrentDatabase
    Set doc = db.CreateDocument
    Dim s As New NotesSession
    Dim stream As NotesStream   
    Dim body As NotesMIMEEntity
    Dim child As NotesMimeEntity
    Dim header As NotesMIMEHeader
    Set body =  doc.CreateMIMEEntity("RT")


    topString = Split(BASE64, ",")

    Dim tmp_array() As String
    i = 0

    For i = 0 To Ubound(topString)
        Redim Preserve tmp_array(i)
        tmp_array(i) = topString(i)

        Set child = body.CreateChildEntity()
        Set header = child.CreateHeader("Content-Type")
        Call header.SetHeaderVal("multipart/mixed") 
        Set header =child.createHeader("Content-Disposition")
        Call header.setHeaderVal({attachment; filename=test} &Cstr(i)& {.jpg}) 'file name and type should be config


        Set header =child.CreateHeader("Content-ID")
        Call header.SetHeaderVal("test" &Cstr(i)& ".jpg")

        Set stream = s.CreateStream()
        Call stream.WriteText(topString(i))
        Call child.SetContentFromText(stream, "", ENC_BASE64)




    Next

    doc.form="Attachment"
    'doc.Attachment = tmp_array 
    Call doc.save(True,False)
    Call stream.Close() 
    s.ConvertMIME = True ' Restore conversion

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Richard Schwartz
Solution 2 azim hamdan