【问题标题】:java.lang.NoClassDefFoundError: java.rmi.server.UID is a restricted classjava.lang.NoClassDefFoundError: java.rmi.server.UID 是一个受限类
【发布时间】:2012-03-19 01:56:36
【问题描述】:

我使用 GWT 开发了一个 Web 应用程序,我正在尝试上传文件。我的 servlet 工作正常。

但是当我使用 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;
} 

错误

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

【问题讨论】:

    标签: java google-app-engine gwt servlets


    【解决方案1】:

    您不能在 GAE 中使用 RMI - 如果您想要类似的东西,请查看 this question

    但从您的代码看来,您根本不需要使用 RMI - 为什么要使用它?你不是要在某个地方处理和存储它吗?

    如果您要存储大文件(最大 32MB),请使用Blobstore API

    如果您知道您只有 Blob 的普通 Entity 来存储它们 - 此选项还允许您轻松地预处理数据。

    【讨论】:

    • 是的,我只想处理并存储它,文件大小可以超过 1 MB,文件类型可以是 txt、doc 和 pdf。请告诉我应该写什么代码。
    • @NewCodeLearner 请检查更新后的答案和this link
    • 请检查有问题的编辑部分。你能解释一下为什么这段代码有效吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多