Java 文件上传不起作用
我创建了小部件,并直接添加到根面板Java 文件上传不起作用,java,gwt,servlets,Java,Gwt,Servlets,我创建了小部件,并直接添加到根面板 public class FileUploadWidget extends VerticalPanel { public FileUploadWidget() { super(); final FormPanel form = new FormPanel(); form.setMethod(FormPanel.METHOD_POST); form.setEncoding(FormPane
public class FileUploadWidget extends VerticalPanel {
public FileUploadWidget() {
super();
final FormPanel form = new FormPanel();
form.setMethod(FormPanel.METHOD_POST);
form.setEncoding(FormPanel.ENCODING_MULTIPART);
form.setAction("/FileUpload");
form.setWidget(this);
final FileUpload fileUpload = new FileUpload();
fileUpload.setName("uploadFormElement");
this.add(fileUpload);
Label maxUpload = new Label();
maxUpload.setText("Maximum upload file size: 1MB");
this.add(maxUpload);
Button button = new Button("Submit");
button.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
form.submit();
}
});
this.add(button);
form.addSubmitCompleteHandler(new SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event) {
Window.alert(event.getResults());
}
});
}
}
我创建了servlet
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain");
FileItem uploadItem = getFileItem(request); //BREAKPOINT
if (uploadItem == null) {
response.getWriter().write("NO-SCRIPT-DATA");
return;
}
try {
uploadItem.write(new File("newfile.txt"));
} catch (Exception e) {
response.getWriter().write("ERROR");
}
response.getWriter().write("OK");
}
private FileItem getFileItem(HttpServletRequest request) {
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()
&& "uploadFormElement".equals(item.getFieldName())) {
return item;
}
}
} catch (FileUploadException e) {
return null;
}
return null;
}
}
我将servlet的web.xml文件映射
<servlet>
<servlet-name>FileUpload</servlet-name>
<servlet-class>my.web.app.GwtFileUpload.server.FileUploadServlet</servlet-class>
</servlet>
....
<servlet-mapping>
<servlet-name>FileUpload</servlet-name>
<url-pattern>/FileUpload</url-pattern>
</servlet-mapping>
文件上传
my.web.app.GwtFileUpload.server.FileUploadServlet
....
文件上传
/文件上传
现在,当我选择file并调用submit时,
当我使用firefox时,什么也没发生(我得到的只是SubmitEvent),我在servlet代码中标记的断点永远不会到达
当我在chrome下尝试相同的代码时,它正在提交到servlet中,但没有找到任何文件
有人能解释一下为什么会有如此不同的行为,以及我如何修复它吗?将fileUpload控件添加到
FormPanel
,因为fileUpload
小部件(实现HasName的小部件)如果包含在此面板中,将提交给服务器
在执行form.setWidget(此操作)之后,您将fileupload
添加到verticlepanel中代码>。喜欢
this.add(fileUpload);
form.setWidget(this);
将fileUpload控件添加到FormPanel
,因为fileUpload
小部件(实现HasName的小部件)如果包含在此面板中,则会提交到服务器
在执行form.setWidget(此操作)之后,您将fileupload
添加到verticlepanel中代码>。喜欢
this.add(fileUpload);
form.setWidget(this);
FileUpload
小部件包装HTML
元素。如果要将此小部件提交到服务器,则必须将其与FormPanel
一起使用。
因此,有必要将文件上载添加到FormPanel
。您已将其直接添加到面板
。
请替换代码
this.add(fileUpload);
到
有关更多详细信息,请浏览链接FileUpload
小部件包装HTML
元素。如果要将此小部件提交到服务器,则必须将其与FormPanel
一起使用。
因此,有必要将文件上载添加到FormPanel
。您已将其直接添加到面板
。
请替换代码
this.add(fileUpload);
到
有关更多详细信息,请浏览链接我建议使用gwtupload库,它将节省大量编写自己代码的时间,并为您的应用程序提供许多功能,如自定义按钮、进度条、文件扩展名、大小限制等
你有这个和这个页面。我建议使用gwtupload库,它可以节省大量编写自己代码的时间,并为你的应用程序提供许多功能,如自定义按钮、进度条、文件扩展名、大小限制等
你有这个和这个页面