Если не через stream, то как (в каком виде) Вы хотели бы получить файл?
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
//Получаем документ
Database db = session.getDatabase("server", "DB.NSF");
Agent agent = agentContext.getCurrentAgent();
Document doc = db.getDocumentByID(agent.getParameterDocID());
Document doc = db.getDocumentByID("B7DA");
String URL = "<тут путь с логином и паролем>";
//Получаем имена аттачай
String ATTACH_NAME = "";
String ATTACH_BIN = "";
Vector items = doc.getItems();
for (int j = 0; j < items.size(); j++) {
Item item = (Item) items.elementAt(j);
switch (item.getType()) {
case Item.ATTACHMENT:
EmbeddedObject obj = doc.getAttachment(item.getValueString());
ATTACH_NAME = ATTACH_NAME + "Attachment: " + obj.getName() + "\n";
ATTACH_BIN = ATTACH_BIN + Как сюда засунуть бинрник аттача????
break;
}
}
//Формируем текст запроса
String CONTENT = "content=id: ticket/new";
CONTENT = CONTENT + "\nQueue: " + "server";
CONTENT = CONTENT + "\nSubject: " + "SUBJ";
CONTENT = CONTENT + "\nRequestor: " + "FROM MAIL";
CONTENT = CONTENT + "\nText: " + "TEST";
CONTENT = CONTENT + "\n" + ATTACH_NAME;
CONTENT = CONTENT + "\n" + ATTACH_BIN;
//Отправляем запрос в RT
String REQUEST = doPost(URL, CONTENT);
//Парсим ответ сервера
...
}
catch(Exception e) {
e.printStackTrace();
}
}
public String doPost(String urlString, String query) {
String line;
URLConnection urlConnection;
try {
String charset = "UTF-8";
URL url = new URL(urlString);
urlConnection = url.openConnection();
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.setUseCaches(false);
urlConnection.setRequestProperty("Accept-Charset", charset);
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset);
OutputStream output = urlConnection.getOutputStream();
output.write(query.getBytes(charset));
output.close();
StringBuffer response = new StringBuffer();
BufferedReader input = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
while ((line = input.readLine()) != null)
response.append(line + "\n");
input.close();
return response.toString();
}
catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
ну на LS нужно предварительно выгрузить файл из документа в какую либо директорию, чтобы потом взять бинарник через stream.не понятны "претензии" к стриму
ващето - нет...ну на LS нужно предварительно выгрузить файл из документа в какую либо директорию, чтобы потом взять бинарник через stream.
ответ -Не понятно, зачем тут LS?
и мой -может на Java не так, не силен)
накладные расходы по памяти, кот. жвм выделено мало, в нотусне, и ежели не поменять нотес.ини - память могет скончаться
Позволю себе провести небольшой ликбез:Код:String ATTACH_BIN = ""; ATTACH_BIN = ATTACH_BIN + Как сюда засунуть бинрник аттача???? }
Слаб я в Java)По сути вопроса:
Для получения содержимого файла проще всего воспользоваться EmbeddedObject.getInputStream().
Строку из файла делать не надо - это мучительная и затратная по памяти операция, тем более что в итоге вы будете его писать его в OutputStream.
Читайте данные из EmbeddedObject.getInputStream(), конвертируйте в нужный формат ( url-encoded в вашем случае ) и пишите в сonnection.getOutputStream(). В результате - затраты по памяти будут околонулевые.
Vector items = doc.getItems();
for (int j = 0; j < items.size(); j++) {
Item item = (Item)items.elementAt(j);
switch (item.getType()) {
case Item.ATTACHMENT:
EmbeddedObject obj = doc.getAttachment(item.getValueString());
obj.getInputStream() // что дальше с этим делать?
break;
}
}
// Отправляем запрос
OutputStream output = null;
output = urlConnection.getOutputStream();
output.write(query.getBytes(charset));
output.close();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
String bullshit = new String( buffer, "UTF-8" ); // собираем строку. Для бинарных файлов получится какая-то фигня.
String encoded = URLEncoder.encode( bullshit, "UTF-8" ); // енкодим в url-encoded
byte[] bytes = encoded.getBytes(); // и вот этот byte[] пишем в открытый поток
оно уже типа инпут стрим, т.е. его можно подавать на вход "любоой" ф-ции кот. принимает такой базовый класс или юзазать read...obj.getInputStream() - что дальше с этим делать?
byte encoded[] = new sun.misc.BASE64Encoder().encodeBuffer(in);
out.write(encoded);
И как его заиметь для аттача лотусового?)Имея inputStream с контентом файла - просто пишем его в oututStream открытого соединения...
И как его заиметь для аттача лотусового?)
EmbeddedObject eo = doc.getAttachment(...)
InputStream input = eo.getInputStream()
Поэтому вам для начала надо определиться со способом кодировки...
Судя по всему - вы собираетесь гнать его в x-www-form-urlencoded, что не совсем разумно.Ссылка скрыта от гостейThe encoding type application/x-www-form-urlencoded is inefficient for sending large quantities of binary data or text containing non-ASCII characters. Thus, a new media type, multipart/form-data, is proposed as a way of efficiently sending the values associated with a filled-out form from client to server.
Обучение наступательной кибербезопасности в игровой форме. Начать игру!