您的位置:首页 > 其它

使用GWT+FileUpload的完整的例子

2010-04-23 17:53 363 查看
今天在GWT中搞了一搞文件上传~Mark之~

首先先去下载commons-fileupload-1.2.1.jar

下载地址:http://commons.apache.org/fileupload/

以及commons-io-1.4.jar

下载地址:http://commons.apache.org/io/

在java客户端添加如下代码:

//选择文件上传的浏览按钮
final FileUpload fileUpload = new FileUpload();
fileUpload.setName("uploadFormElement");
//创建表单Panel,提交HTML表格,添加fileUpload
final FormPanel formPanel = new FormPanel();
formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
formPanel.setMethod(FormPanel.METHOD_POST);
formPanel.setAction(GWT.getModuleBaseURL()+"fileupload");
formPanel.setWidget(fileUpload);
//文件上传按钮
final Button btnUpload = new Button("Upload");
//单击按钮提交servlet
btnUpload.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
// TODO Auto-generated method stub
formPanel.submit();
}
});
formPanel.addFormHandler(new FormHandler(){
@Override
public void onSubmit(FormSubmitEvent event) {
// TODO Auto-generated method stub
if(fileUpload.getFilename().length() == 0){
//Window.alert("必须选择一个文件");
event.setCancelled(true);
}else if(!fileUpload.getFilename().endsWith(".jpg") && !fileUpload.getFilename().endsWith(".gif")){
System.err.println("error in format");
event.setCancelled(true);
}
}
@Override
public void onSubmitComplete(FormSubmitCompleteEvent event) {
// TODO Auto-generated method stub
System.out.println(" ==== onSubmitComplete ====");
System.out.println(event.getResults());
}
});


添加一个服务器端的servlet:

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);

List items = null;
upload.setSizeMax(1024*1024*1);
try {
items = upload.parseRequest(request);
} catch (FileUploadException ex) {
throw new ServletException(ex);
}

Iterator iter = items.iterator();

while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField() == false) {
//获得上传路径
String savePath = getServletContext().getRealPath("/uploads");

//获得文件扩展名
String ext = item.getName().substring(item.getName().lastIndexOf("."));

//取的file域的值的名字,不带路径
int pos = item.getName().lastIndexOf("//");
String fieldValue = item.getName().substring(pos+1);
//或直接保存成文件
File file = new File(savePath,fieldValue);

try {
item.write(file);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//直接保存文件
}
}
}
}


在web.xml中添加servlet的mapping:

<servlet>
<servlet-name>fileupload</servlet-name>
<servlet-class>myproject.server.FileUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>fileupload</servlet-name>
<url-pattern>/mconfrelease3/fileupload</url-pattern>
</servlet-mapping>


PS:web.xml中的mconfrelease3是项目名,fileupload对应的是客户端文件中那句formPanel.setAction(GWT.getModuleBaseURL()+"fileupload");的fileupload~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: