2012-02-29 19 views
1

我正在開發一個使用GWT的Web應用程序,我試圖上傳一個文件。我的servlet工作正常。java.lang.NoClassDefFoundError:java.rmi.server.UID是一個受限制的類

但是當我使用DiskFileItemFactory()它給我錯誤。

如果有人能更正我的代碼或告訴代碼中缺少什麼。

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) 

編輯:工作守則

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(); 
    } 

回答

3

不能在GAE使用RMI - 如果你想類似的東西,看看this question

但是從你的代碼看來你並不需要使用RMI--你爲什麼使用它?你不是隻是要處理和存儲它的地方?

如果要存儲大文件(最大32MB),請使用Blobstore API

如果您知道只有文件< 1MB,則可以使用JDO/JPA和包含Blob的普通Entity進行存儲 - 此選項還允許您輕鬆預處理數據。

+0

是的,我只是想處理它並存儲它,而且文件大小可以超過1 MB,文件類型可以是txt,doc和pdf。請告訴我應該寫什麼代碼。 – NewCodeLearner 2012-02-29 15:14:20

+0

@NewCodeLearner請檢查已更新的答案和[此鏈接](http://code.google.com/appengine/docs/java/datastore/entities.html)。 – Marcelo 2012-02-29 15:22:12

+0

Plz檢查有問題的編輯部分。 你能解釋爲什麼這個代碼工作。 – NewCodeLearner 2012-02-29 15:28:05

相關問題