про загрузку файлов...
увы, но DAS не является многопоточным (где-то была инфа, но я проверил на практике) в случае отправки аттача (другие не проверял)
выход есть - создание сервлета...
создавать с "0" - это достаточно неудобный способ, есть проще - xPage, хотя он добавит объекты JSF, но если все-равно используем xPages - так и поступим
на хэпагу ставим такой код, где com.setralubs.JsonService класс который будет в Code->Java (в дизайнере)
для размещения аттача я задействовал ODA (было влом возиться с голыми объектами домины)
важный момент, для использования класса (адаптированного мной) RichTextOutputStream - удаление поля РТ иначе майм не создать
для сравнения - время загрузки файла через сервлет менее секунды (1,4Мбайта), через DAS - 7секунд
увы, но DAS не является многопоточным (где-то была инфа, но я проверил на практике) в случае отправки аттача (другие не проверял)
выход есть - создание сервлета...
создавать с "0" - это достаточно неудобный способ, есть проще - xPage, хотя он добавит объекты JSF, но если все-равно используем xPages - так и поступим
XML:
<xe:restService id="JSONService" pathInfo="JSONService"
rendered="false" preventDojoStore="true" disableTheme="true">
<xe:this.service>
<xe:customRestService serviceBean="com.setralubs.JsonService"
contentType="application/json">
</xe:customRestService>
</xe:this.service>
для размещения аттача я задействовал ODA (было влом возиться с голыми объектами домины)
Java:
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Scanner;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import com.ibm.commons.util.io.json.JsonJavaObject;
import com.ibm.domino.services.ServiceException;
import com.ibm.domino.services.rest.RestServiceEngine;
import com.ibm.xsp.extlib.component.rest.CustomService;
import com.ibm.xsp.extlib.component.rest.CustomServiceBean;
import org.openntf.domino.Database;
import org.openntf.domino.Document;
import org.openntf.domino.Session;
import org.openntf.domino.View;
import org.openntf.domino.ViewEntry;
import org.openntf.domino.ViewEntryCollection;
import org.openntf.domino.utils.Factory;
public class JsonService extends CustomServiceBean {
@Override
public void renderService(CustomService service, RestServiceEngine engine) throws ServiceException {
// TODO Auto-generated method stub
super.renderService(service, engine);
HttpServletRequest request = engine.getHttpRequest();
HttpServletResponse response = engine.getHttpResponse();
response.setHeader("Content-Type", "application/json; charset=UTF-8");
try {
PrintWriter writer = response.getWriter();
JsonJavaObject jo = new JsonJavaObject();
String id=request.getParameter("id");
long cnt=0;
//System.out.println("id length: "+id.length());
if (id!=null && !id.isEmpty() &&id.length()==32){
Session ses = Factory.getSession();
Database db=ses.getCurrentDatabase();
Document doc=db.getDocumentByUNID(id);
if (doc!=null){
doc.removeItem("Body");
//doc.computeWithForm(false, false);
System.out.println("content type: "+request.getContentType());
jo.put("Content-type",request.getContentType());
if(request.getContentType().contains("application/vnd.")
|| request.getContentType().contains("application/octet-stream")){
System.out.println("Processing...");
RichTextOutputStream rtos;
rtos = new RichTextOutputStream(doc);
String batch=doc.getItemValueString("batch");
String prodName=doc.getItemValueString("prodName");
rtos.setFileName(prodName.replaceAll("[^a-zA-Z0-9.-]", "_")
+"("+batch+")"+".docx");
byte[] buffer = new byte[8 * 1024];
int bytesRead;
InputStream bodyIs=request.getInputStream();
while ((bytesRead = bodyIs.read(buffer)) != -1) {
rtos.write(buffer, 0, bytesRead);
cnt+=bytesRead;
}
bodyIs.close();
rtos.close();
rtos.save();
}else if(request.getContentType().contains("application/json")){
String sBody=extractPostRequestBody(request);
jo.put("body",sBody);
cnt=sBody.getBytes("UTF-8").length;
}
}
}else{
System.out.println("TEXT body");
String sBody=extractPostRequestBody(request);
jo.put("body",sBody);
cnt=sBody.getBytes("UTF-8").length;
}
jo.put("argument", id);
jo.put("body size", cnt);
writer.write(jo.toString());
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static String extractPostRequestBody(HttpServletRequest request) {
Scanner s = null;
//System.out.println("Getting body string..");
try {
s = new Scanner(request.getInputStream(), "UTF-8").useDelimiter("\\A");
} catch (IOException e) {
e.printStackTrace();
}
return s.hasNext() ? s.next() : "";
}
}
для сравнения - время загрузки файла через сервлет менее секунды (1,4Мбайта), через DAS - 7секунд
Последнее редактирование: