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();
}
是的,我只是想處理它並存儲它,而且文件大小可以超過1 MB,文件類型可以是txt,doc和pdf。請告訴我應該寫什麼代碼。 – NewCodeLearner 2012-02-29 15:14:20
@NewCodeLearner請檢查已更新的答案和[此鏈接](http://code.google.com/appengine/docs/java/datastore/entities.html)。 – Marcelo 2012-02-29 15:22:12
Plz檢查有問題的編輯部分。 你能解釋爲什麼這個代碼工作。 – NewCodeLearner 2012-02-29 15:28:05