Как правильно сохранить файл Excel в двоичном, введите в MIMEentity? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть python scritp, какой вызов выбрасывает web, мой агент LotusScript, я использую python библиотечные запросы для отправки пост-запроса моему агенту с файлом Excel. На сервере, когда я вызываю агента, я не могу получить мои двоичные данные с другим заголовком, для этого я использую переменную REQUEST_CONTENT. Я записываю эти данные в поток, затем создаю CreateMIMEEntity и записываю streem в эту сущность, как в результате я получаю недопустимые данные в файле.

Например, если python читает двоичные данные и я показываю их мне, первые 2 укуса «PK \ x03 \ x04» после сохранения «PK% 03% 04»

import requests
SITE_AGENT = "http://localhost/testAnon.nsf/saveFile?OpenAgent"

# download_file = requests.get("http://localhost/testAnon.nsf/9807d86fd907874dc225854d00471b71/b789c72cbd6ccfdfc225854d00472e7e/$FILE/murpl1.xlsx")
# open('murpl1.xlsx', 'wb').write(download_file.content)
file_name_list = ['testforUpload.xlsx']
headers = {"Content-Type":"application/x-www-urlencoded; charset=UTF-8"}
files= dict()
for file_name in file_name_list:
    with open(file_name, 'rb') as file:
       files[file_name] = file.read()
       print(files[file_name])

upload_file = requests.post(SITE_AGENT,files=files,headers=headers)

Код LotusScript:

%REM
    Agent saveFile
    Created Apr 17, 2020 by Andriy Kosinskiy/CiNAU
    Description: Comments for Agent
%END REM
Option Public
Option Declare

Sub Initialize
    Dim session As New NotesSession
    Dim stream As NotesStream
    Dim streamLocal As NotesStream
    Dim body As NotesMIMEEntity
    Dim header As NotesMIMEHeader
    Dim StringInBase64 As String
    Dim db As NotesDatabase
    Dim tempdoc As NotesDocument
    Dim doc As NotesDocument

    Set db=session.Currentdatabase  
    session.ConvertMIME = False ' Do not convert MIME to rich text
    Set doc = session.DocumentContext
    StringInBase64= doc.REQUEST_CONTENT(0)
    Set tempdoc=db.Createdocument()


    Set stream = session.CreateStream
    'Call stream.Open("c:\text.txt", "ASCII")
    Call stream.WriteText(StringInBase64)

    Set body = tempdoc.CreateMIMEEntity()

    ' Added headers
    Set header = body.createHeader("Content-Type")
    Call header.setHeaderVal("multipart/mixed")
    Set header = body.createHeader("Content-Disposition")
    Call header.setHeaderVal("attachment; filename=testforUpload.xlsx")
    Set header = body.createHeader("Content-ID")
    Call header.setHeaderVal("testforUpload.xlsx") 
    Call body.SetContentFromBytes(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ENC_IDENTITY_BINARY )
    tempdoc.Dublicat = doc.REQUEST_CONTENT(0)
    tempdoc.form="test"
    Call tempdoc.save(True,False)
    session.ConvertMIME = True ' Restore conversion
End Sub
...