Google app engine GWT:form post只在本地服务器上工作,而不在应用程序引擎上工作
我有一个带有FormPanel、FileUpload和按钮的表单Google app engine GWT:form post只在本地服务器上工作,而不在应用程序引擎上工作,google-app-engine,gwt,servlets,post,Google App Engine,Gwt,Servlets,Post,我有一个带有FormPanel、FileUpload和按钮的表单 final FormPanel formPanel = new FormPanel(); formPanel.setAction("uploadServlet"); formPanel.setMethod(FormPanel.METHOD_POST); formPanel.setEncoding(FormPanel.ENCODING_MULTIPART); formPanel.set
final FormPanel formPanel = new FormPanel();
formPanel.setAction("uploadServlet");
formPanel.setMethod(FormPanel.METHOD_POST);
formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
formPanel.setSize("100%", "100%");
setWidget(formPanel);
AbsolutePanel absolutePanel = new AbsolutePanel();
formPanel.setWidget(absolutePanel);
absolutePanel.setSize("249px", "70px");
final FileUpload fileUpload = new FileUpload();
fileUpload.setName("uploadFormElement");
absolutePanel.add(fileUpload, 0, 0);
Button btnOpen = new Button("Open");
absolutePanel.add(btnOpen, 10, 30);
Button btnCancel = new Button("Cancel");
absolutePanel.add(btnCancel, 63, 30);
this.setText("Open...");
this.setTitle(this.getText());
this.setAnimationEnabled(true);
this.setGlassEnabled(true);
btnOpen.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
formPanel.submit();
}
});
servlet被调用,但请求包含错误消息“error post”。
当我在本地服务器上尝试它时,它工作正常,请求包含该文件,但在app engine服务器上仅显示错误
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<?> items = null;
String json = null;
try {
items = upload.parseRequest(request);
}
catch (FileUploadException e) {
e.printStackTrace();
}
Iterator<?> it = items.iterator();
while (it.hasNext()) {
System.out.println("while (it.hasNext()) {");
FileItem item = (FileItem) it.next();
json = item.getString();
}
response.setContentType("text/html");
ServletOutputStream out = response.getOutputStream();
response.setContentLength(json.length());
out.write(json.getBytes());
out.close();
}
public void doPost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
FileItemFactory=new DiskFileItemFactory();
ServletFileUpload upload=新的ServletFileUpload(工厂);
列表项=空;
字符串json=null;
试一试{
items=upload.parseRequest(请求);
}
捕获(文件上载异常){
e、 printStackTrace();
}
Iterator it=items.Iterator();
while(it.hasNext()){
System.out.println(“while(it.hasNext()){”);
FileItem=(FileItem)it.next();
json=item.getString();
}
response.setContentType(“text/html”);
ServletOutputStream out=response.getOutputStream();
response.setContentLength(json.length());
write(json.getBytes());
out.close();
}
DiskFileItemFactory是commons fileupload库的默认实现,它基于javadoc:
此实现创建FileItem实例,这些实例将其内容保存在内存中(对于较小的项目),或者将其内容保存在磁盘上的临时文件中(对于较大的项目)。可以配置大小阈值(超过该阈值,内容将存储在磁盘上),以及创建临时文件的目录。
如果没有其他配置,默认配置值如下:
大小阈值为10KB。Repository是system.getProperty(“java.io.tmpdir”)返回的系统默认临时目录。
所以正如您所看到的,这个实现将在没有足够内存的情况下写入文件系统
在GAE中,有许多限制,比如允许使用的内存,或者禁止在文件系统中写入
您的代码在GAE开发模式下应该会失败,但可能您还没有达到内存限制,或者其他什么,因为GAE dev试图模拟与生产服务器相同的约束,但它并不相同
说,我可以看看图书馆,他们有一个用于GAE的servlet,可以用不同的方式保存文件:BlobStore、FileApi和MemCache。你能发布你的servlet的重要部分吗?在那里你可以得到文件并将其内容保存到任何地方。我添加了servlet代码