#php #lotus-notes #lotus-domino #lotusscript
#php #lotus-notes #лотос-домино #lotusscript
Вопрос:
Я хотел бы отправить файлы с моего текущего адреса электронной почты на мой веб-сайт через агент lotusscript. Я хотел бы сделать что-то вроде этого: (я знаю, что этот код не может работать, но это для того, чтобы показать идею)
Sub Initialize
On Error GoTo ErrorHandler
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim item As Variant
Dim uidoc As NotesUIDocument
Dim CurrentDocColl As NotesDocumentCollection
Dim url As String
Dim jsonBody As String
Dim http As NotesHTTPRequest
Dim headers As Variant
Dim ret As Variant
Set Session = New NotesSession
Set db = Session.Currentdatabase
Set CurrentDocColl = db.Unprocesseddocuments
Set doc = CurrentDocColl.Getfirstdocument
While Not doc Is Nothing
Set item = doc.GETFIRSTITEM("Body")
If doc.HasEmbedded Then
url="http://myurl.com/addFiles.php"
jsonBody="value={""id"":""7777"",""file"":""" item.EmbeddedObjects """}"
Set http=session.CreateHTTPRequest()
http.preferstrings = True
Call http.SetHeaderField("ContentType","application/json")
ret = http.Post(url, jsonBody)
MessageBox ret
End If
Set doc=CurrentDocColl.Getnextdocument(doc)
Wend
Exit Sub
ErrorHandler:
MessageBox "Erreur N° : " Cstr(Err)_ ' code numérique de l'erreur
" Description : " Error(Err)_ ' La description de l'erreur
" Ligne N° : " CStr(Erl)_ ' La ligne où se trouve l'erreur
"",16, " ERREUR !"
Exit Sub
End Sub
Вот мой php-код, который будет извлекать файлы:
header("Vary: Origin");
header("Content-type: application/json");
if (isset($_FILES['file'])) {
$total = count($_FILES['file']['name']);
for ($i = 0; $i < $total; $i ) {
$tmpFileName = $_FILES['file']['tmp_name'][$i];
echo $tmpFileName;
}
}
Как я могу отправить его файлы на свой сайт? Потому что обычно в Javascript, когда мы хотим отправить файлы в PHP-код, мы отправляем их в FormData, который содержит поле типа «файл». Но я не знаю эквивалента в lotusscript. Я немного не понимаю, как это сделать.
Спасибо за вашу помощь!
Ответ №1:
Вам нужно будет использовать метод ExtractFile класса NotesEmbeddedObject, чтобы сохранить данные вложения в файл, а затем вам нужно будет прочитать содержимое файла и поместить его в переменную, которую вы отправляете для данных POST. Насколько я знаю, нет ярлыка для выполнения этого за один шаг. Прошло много лет с тех пор, как я использовал эту технику, и это было в коде Java, а не в LotusScript. Обратите внимание, что ваш код должен иметь разрешения на создание файлов на сервере или клиенте, на котором выполняется код.
Комментарии:
1. Здравствуйте, спасибо за ваш совет, у вас есть пример того, как это сделать? Потому что я понимаю, что вы говорите, но я не знаю, как это сделать.
2. Нет, у меня нет примера кода, который я мог бы вам дать. Если вы попробуете это самостоятельно и у вас возникнут проблемы с этим, вы можете опубликовать новый вопрос здесь, в StackOverflow, и многие из нас смогут вам помочь. И я думаю, что если вы поищете здесь, в StackOverflow, то, о чем я упоминал, вы, вероятно, найдете примеры кода в других контекстах, где вы можете узнать о том, как использовать NotesEmbeddedObject.ExtractFile, как читать содержимое файла и как правильно форматировать данные POST для передачи вложения файла.