• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Заметка Lotus Domino Upload File AJAX и %%File

Темы, которые НЕ подходят по объему под префикс "Статья"

NetWood

Lotus Team
17.04.2008
545
93
BIT
8
Помимо описанного в интернетах для AJAX загрузки файла на Domino сервер, нашел нигде не описанную вещь с formData.append('%%File', file )!

Пример
HTML:
<form id="UploadFile">
<p><input type="file" id='File1' name="%%File.1" /></p>
</form>
с этой формы собираем данные
JavaScript:
var formData = new FormData( $( '#UploadFile' )[0]  ); //все что в форме
var url = 'UploadOrder?createdocument';
и отправляем на сервер аяксом
JavaScript:
$.post({
                    async: false,
                    cache: false,
                    url: url,
                    data: formData,
                    enctype: "multipart/form-data", //не обязательно
                        contentType: false,   // Important!
                        processData: false,   // Important!
                    dataType: "json",
                    success: function(resp){
                                    if ( resp.update == '1' ) {
       //тут  что-то наше
                                    };
                                },
                    error: function(xhr){ console.log('Error '+ xhr.status);  }
              });
          };
далее разбираем по WQS в агенте на форме UploadOrder, где также SaveOptions=0
(Помните, что если не запускать агент @Command([ToolsRunMacro]; "<Размещение агента>"), то после createdocument, будет вылетать надпись 'Форма обработана'. , например, об этом пишет )
Visual Basic:
    Dim ns As New NotesSession
    Dim ctx As NotesDocument
    Set ctx = ns.DocumentContext

    If ctx.HasEmbedded Then
        ''= Это работатет
        ''https://codeby.net/threads/ne-ponjatnyj-gljuk-embeddedobjects.37877/
        Forall obj In ctx.Items
            If obj.name = "$FILE" Then
                filename$ = obj.values(0)
                ''Messagebox( filename$ )
                ''Call ctx.ReplaceItemValue("SaveOptions" ,"1")    ''И даже не надо сохранять    !!!!
 
                FileExt$=Ucase$(Right$(filename$,Len(filename$)-Instr(filename$,"."))) ' расширение
                Set fobj = ctx.GetAttachment( fileName$ )
                ''Messagebox( fobj.FileSize )
 
                If FileExt$ = "CSV" Then ''Только файлы .csv        !!!
                   '' тут тоже что-то наше
                End If
 
            End If
        End Forall
 
    End If

    Print |Content-type: application/json; charset=utf-8|
    Print ||
    Print |{"shopcart":"|+SessionID$+|","filename":"|+filename+|","update":"|+Cstr(update)+|","inputstrcount":"|+Cstr(InputStrCount)+|","doccount":"|+Cstr(doccount)+|","jsonerror":|+Cstr(jsonString)+|,"errormsg":"|+ErrorMsg+|"}|

Сбор данных с полной формы прекрасно работает, НО не работает конструкция
JavaScript:
var file = $('#File1')[0].files[0];
var formData = new FormData();
        formData.append('file', file);

    for (var key in formData.entries() ) {
        console.log(key, formData[key]);
    }
Пусто в контексте(. Консоль ничего не показывает даже сбором entries.

Все что надо сделать — вместо 'file' указать '%%File' (можно без '%%File.1' если один файл). Вот находка! И это еще регистрозависимое от имени в форме — '%%file' не работает(.
JavaScript:
var file = $('#File1')[0].files[0];
//var file = $('[name="%%File.1"]')[0].files[0]; //или так
        var formData = new FormData();
        formData.append('%%File', file ); //Это на Domino прекрасно работает!
И вуаля! Вот он файл в контексте ctx, который можно разобрать и даже не сохранять. Заюзаьть контроль, например, так mosh-feu
Заменить в Upload.prototype.doUpload = function () {
Код:
//formData.append("file", this.file, this.getName()); //так в Domino не грузится!!!!!!!!!!!!!!!
    formData.append("%%File", this.file, this.getName());

Естественно, на сервере надо в файле notes.ini прописать DominoDisableFileUploadChecks=1
для отключения error 500 "HTTP Web Server: File Upload Not Allowed Exception"

Еще замечено, что если повысить Анонимуса до Редактора без изменения notes.ini, то File Upload Not Allowed Exception пропадает. Ну, такоэ...

О сколько нам открытий чудных
Готовят просвещенья дух
И Опыт, [сын] ошибок трудных,
И Lotus, [парадоксов] друг,

[И Случай, бог изобретатель]
 
Последнее редактирование:
  • Нравится
Реакции: Domino-Designer и rinsk
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!