1

I developing a web application using GWT where i am trying to upload a file . My servlet is working fine.

but when i use DiskFileItemFactory() it gives me error.

if some one can correct my code or tell what is missing in code.

 protected void doPost(HttpServletRequest request, 
            HttpServletResponse response) 
                    throws ServletException, IOException { 

         response.setContentType("text/plain"); 
        FileItem uploadItem = getFileItem(request); 
        if (uploadItem == null) { 
          response.getWriter().write("NO-SCRIPT-DATA"); 
          return; 
        } 
        byte[] fileContents = uploadItem.get(); 
        //TODO: add code to process file contents here. We will just print 

                    response.getWriter().write(new String(fileContents)); 
}

private FileItem getFileItem(HttpServletRequest request) {
    // TODO Auto-generated method stub
    FileItemFactory factory = new DiskFileItemFactory(); 
    ServletFileUpload upload = new ServletFileUpload(factory); 
    try { 
      List items = upload.parseRequest(request); 
      Iterator it = items.iterator(); 
      while (it.hasNext()) { 
        FileItem item = (FileItem) it.next(); 
        if (!item.isFormField() 
            && "uploadForm".equals(item.getFieldName())) { 
          return item; 
        } 
      } 
    } catch (FileUploadException e) { 
      return null; 
    } 
    return null;
} 

ERROR

 java.lang.NoClassDefFoundError: java.rmi.server.UID is a restricted class. Please see the Google  App Engine developer's guide for more details.
at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)
at org.apache.commons.fileupload.disk.DiskFileItem.<clinit>(DiskFileItem.java:109)
at org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:199)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:361)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
at com.server.FileUpload.getFileItem(FileUpload.java:101)
at com.server.FileUpload.doPost(FileUpload.java:48)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)

Edited: Working Code

    try {
            ServletFileUpload upload = new ServletFileUpload();
            response.setContentType("text/plain"); 


            FileItemIterator iterator = upload.getItemIterator(request);

            while (iterator.hasNext()) {
                FileItemStream item = iterator.next();

                InputStream stream = item.openStream();

                if (item.isFormField()) {
                    log.warning("Got a form field: " + item.getFieldName()  + " " +item);



                } else{
                    log.warning("Got an uploaded file: " + item.getFieldName() +
                              ", name = " + item.getName());
                    int len;
                    byte[] buffer = new byte[8192];
                    while ((len = stream.read(buffer, 0, buffer.length)) != -1) {

                      response.getOutputStream().write(buffer, 0, len);

                    }

                }

            }
    } catch (FileUploadException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
NewCodeLearner
  • 738
  • 3
  • 14
  • 38

1 Answers1

3

You cannot use RMI in GAE - if you want something similar, take a look at this question.

But from your code it doesn't seem you need to use RMI at all - why are you using it? Ain't you just going to process and store it somewhere?

If you are going to store large files (up to 32MB), use the Blobstore API.

If you know you'll only have files <1MB, you can store them using JDO/JPA and a normal Entity that contains a Blob - this option will also allow you to easily pre-process the data.

Community
  • 1
  • 1
Marcelo
  • 4,580
  • 7
  • 29
  • 46
  • yes i just want to process it and store it and also file size can be more then 1 MB ,type of file can be txt,doc and pdf. Please tell what code should i write. – NewCodeLearner Feb 29 '12 at 15:14
  • @NewCodeLearner please check the updated answer and [this link](http://code.google.com/appengine/docs/java/datastore/entities.html). – Marcelo Feb 29 '12 at 15:22
  • Plz check the edited part in question. can you explain why this code is working. – NewCodeLearner Feb 29 '12 at 15:28