- 27.08.2008
- 8 015
- 613
про загрузку файлов...
увы, но 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секунд
			
				Последнее редактирование: 
				
		
	
										
										
											
	
										
									
								 
	 
	 
	 
	 
	 
 
		 
 
		
 
 
		 
 
		 
 
		 
	