从代理创建富文本项中的内嵌图像

时间:2012-10-11 07:24:29

标签: lotus-domino lotusscript

我正在尝试编写一个通过xmlhttprequest运行并接受的代理 UNID和Base64编码的图像作为参数。

我要做的是代理解码base64字符串并将其写为内联图像 进入RichText字段

我尝试将base64编码的字符串写入Stream,然后使用子实体创建MimeEntity并从流中设置内容, 然后获取MimeEntity项并将其附加到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)

但我最终得到了一个6400byte的image / jpeg文件 现在我再也没有了。

有没有人知道如何获得这样的工作? 在先感谢=)

编辑:

好的,我认为它只是创建一个包含有效base64字符串的文件 但它没有得到解码


好了,现在我至少得到了这个:

  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

将有效图像添加到RichText项目=)

但我不明白我怎么能把它变成一个内嵌图像。 文件名也不正确。

再次感谢任何帮助=)

2 个答案:

答案 0 :(得分:0)

我相信您希望使用multipart / related而不是multipart / mixed,并将Content-ID:标头分配给存储iamge的MIMEEntity,然后使用它来引用图像中的内容ID。

答案 1 :(得分:0)

希望这可以解决。

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