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

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

    Скидки до 10%

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

прикрепить файл через MIME

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Всем привет.
Есть вот такая конструкция. Работает на Tomcat. Этот же код работает и на Lotus.

Java:
            objData.getFiles().forEach( ( field, value ) ->{
                try {
                 
                    Stream stream = session.createStream();
                    MIMEEntity body = doc.createMIMEEntity( field );
                 
                    value.forEach( (fileName, fileData) ->
                    {
                        try {
                            System.out.println( "fileName = " + fileName );
                            stream.writeText( fileData );
                            MIMEEntity child = body.createChildEntity();
                            MIMEHeader header = child.createHeader( "Content-Type" );
                            header.setHeaderVal( "multipart/related" );
                            header = child.createHeader("Content-Disposition" );
                            header.setHeaderVal( "attachment; filename=" + fileName );
                            header = child.createHeader( "Content-ID" );
                            header.setHeaderVal( fileName );
                            //child.setContentFromText( stream, "text/plain;charset=UTF-8", MIMEEntity.ENC_BASE64 );
                            child.setContentFromText( stream, "application/octet-stream;charset=UTF-8", MIMEEntity.ENC_BASE64 );
                            stream.close();                    
                            stream.recycle();
                         
                        } catch (NotesException e2) {
                            // TODO Auto-generated catch block
                            e2.printStackTrace();
                        }
                     
                    } );
. . .
            if( compute ) {
                doc.computeWithForm(true, false);
            }
         
            doc.save(true, false, true);

Все бы хорошо, но на Tomcat возникает проблема с файлами с кириллицей и пробелами в имени. Они цепляются, но имена файлов Lotus придумывает/присваивает свои.
Так же проблема с кириллицей в body

Вот что получается в итоге:
Код:
Field Name: $FILE
Data Type: Attached Object
Data Length: 44 bytes
Seq Num: 1
Dup Item ID: 0
Field Flags: ATTACH SIGN SEAL SUMMARY

Object Type: File
Object ID: 00040212
Object Length: 3256
File Name: mime.123
Flags:
Host: MSDOS/OS2
Compression Type: NONE
Encoding Type:
File Attributes: RW PUBLIC
File Size: 3256
File Created: 21.08.2019 11:35:53
File Modified: 21.08.2019 11:35:53
 
Последнее редактирование:

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
259
Так же проблема с кириллицей в body
нет определения кодировки у stream, по-умолчанию она берется у ОС
objData.getFiles().forEach( ( field, value )
вот не уверен что перебор айтемов подобным образом дает имена файлов ;)
 
Последнее редактирование:

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
тут все хорошо. Имена файлов и их содержимое наполняется.
objData - динамический объект. По сути с двумя свойствами.
Java:
private HashMap<String, Object > fields;
private HashMap<String, HashMap<String, String> > files;
К переменным претензий нет.
Вопрос не с содержимым, а с именем файла.
stream на имя файла не влияет
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Отлично!
Помогло! по крайней мере результат тот, что хотелось.

Большую часть предложенной функцию можно заменить на такое
Base64.getUrlEncoder().encodeToString( "мале нький.txt".getBytes("utf-8") )
 
Последнее редактирование:

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
259

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
259
не оно?
про него я и говорил, есть маленькое НО, случай со стримом не из файла...
тогда кодировки не будет и нужно будет делать хак через промежуточный стрим
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
У меня стрим из Base64-строки. Уже несколько лет работает и проблем нет
 
Мы в соцсетях:

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