2012-02-29 16 views
1

ファイルをアップロードしようとしているGWTを使用してWebアプリケーションを開発しています。私のサーブレットは正常に動作しています。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を使用します。

あなたはファイルのみ< 1メガバイトを持っています知っている場合、あなたはJDO/JPAを使用してそれらを保存することができ、通常のEntityBlobが含まれている - このオプションはまた、あなたが簡単に前処理データすることができます。

+0

はい私はちょうどそれを処理し、それを保存し、またファイルのサイズが1MB以上であれば、ファイルの種類はtxt、docおよびpdfになります。どのコードを書くべきか教えてください。 – NewCodeLearner

+0

@NewCodeLearner最新の回答と[このリンク](http://code.google.com/appengine/docs/java/datastore/entities.html)をご確認ください。 – Marcelo

+0

問題の編集部分を確認してください。 このコードが機能する理由を説明できますか? – NewCodeLearner

関連する問題