2

当我使用以下行时,我没有收到错误

    FileItemIterator it = servletFileUpload.getItemIterator(request);

当我使用以下行时,我明白了

    List fileItemsList = servletFileUpload.parseRequest(request);

它们有何不同以及 rmi 与 servletFileUpload.parseRequest(request); 有何关系?

错误: 原因:

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.(DiskFileItem.java:103)
    at org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:196)
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:358)
    at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
    at morefile.CopyOfUploadApp.doPost(CopyOfUploadApp.java:147)

上下文:在谷歌应用程序上使用 Apache commons lib 的文件上传应用程序。

4

2 回答 2

4

Commons FileUpload (1.2.1) 仅与 GAE 半兼容。仅支持流 API,但不支持传统 API,因为 GAE 不提供本地文件系统。在stacktace中,我看到了DiskFileItem的用法,它基本上将上传的文件写入本地并稍后将其删除。

请参阅 GAE 的 Apache Commons FileUpload和对 Java 框架的支持下的部分

这是流式 API 的用法。

于 2009-11-17T02:03:33.403 回答
2

Commons FileUpload 库中的 DiskFileItem 类在内部使用 java.rmi.server.UID,Google Apps 运行时环境禁止使用此类。由于 DiskFileItem 正在服务器文件系统上缓存上传的文件,并且 Google Apps 无论如何都禁止访问磁盘,因此删除对 RMI 特定 UID 类的依赖不会解决您的问题。

于 2009-11-17T02:04:41.217 回答