GWT 实现文件上传和下载
首先下载两个包 commons-fileupload-?.jar和commons-io-?.jar 将他们配置到你的项目中
先把它们放在 "项目名/war/WEB-INF/lib" 中,之后直接在 properties 中加入到项目中(没配置过可以去网上查eclipse配置jar的方法,很简单的)
之后就开始啦,client 端代码:
- final FileUpload fileUpload = new FileUpload();
- final FormPanel formpanel = new FormPanel();
- fileUpload.setName("uploadFormElement");
- formpanel.setEncoding( FormPanel.ENCODING_MULTIPART );
- formpanel.setMethod( FormPanel.METHOD_POST );
- formpanel.setAction( GWT.getModuleBaseURL() + "fileupload" );
- formpanel.setWidget( fileUpload );
- uploadbutton.addClickHandler( new ClickHandler() {
- public void onClick( ClickEvent sender ) {
- formpanel.submit();
- }
- });
- formpanel.addSubmitHandler( new SubmitHandler() {
- public void onSubmit(SubmitEvent event) {
- if( fileUpload.getFilename().length() == 0 ) {
- Window.alert( "you must select a file" );
- }
- }
- });
- formpanel.addSubmitCompleteHandler( new SubmitCompleteHandler() {
- public void onSubmitComplete(SubmitCompleteEvent event) {
- //兼容linux文件分隔符?
- String selected = fileUpload.getFilename().replaceAll("/", "//");
- selected = selected.substring( selected.lastIndexOf("//")+1);
- Window.alert( "upload complete"+ event.getResults());
- }
- });
final FileUpload fileUpload = new FileUpload();
final FormPanel formpanel = new FormPanel();
fileUpload.setName("uploadFormElement");
		formpanel.setEncoding( FormPanel.ENCODING_MULTIPART );
		formpanel.setMethod( FormPanel.METHOD_POST );
		formpanel.setAction( GWT.getModuleBaseURL() + "fileupload" );
		formpanel.setWidget( fileUpload );
uploadbutton.addClickHandler( new ClickHandler() {
			public void onClick( ClickEvent sender ) {
				formpanel.submit();
			}
		});
		formpanel.addSubmitHandler( new SubmitHandler() {
			public void onSubmit(SubmitEvent event) {
				if( fileUpload.getFilename().length() == 0 ) {
					Window.alert( "you must select a file" );
				}
}
		});
		formpanel.addSubmitCompleteHandler( new SubmitCompleteHandler() {
			public void onSubmitComplete(SubmitCompleteEvent event) {
				//兼容linux文件分隔符?
				String selected = fileUpload.getFilename().replaceAll("/", "//");
				selected = selected.substring( selected.lastIndexOf("//")+1);
								Window.alert( "upload complete"+ event.getResults());
			}
		});
之后再server中添加服务 :FileUploadServlet.java
- package sample.server;
- 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");
- response.setCharacterEncoding("utf-8");
- FileItemFactory factory = new DiskFileItemFactory();
- ServletFileUpload upload = new ServletFileUpload(factory);
- List items = null;
- try {
- items = upload.parseRequest(request);
- }
- catch (FileUploadException ex) {
- ex.printStackTrace();
- }
- Iterator iter = items.iterator();
- while (iter.hasNext()) {
- FileItem item = (FileItem) iter.next();
- String savePath = getServletContext().getRealPath("/uploads");
- String filename = item.getName();
- String filename2 = filename.replaceAll("/", "//");
- int pos = filename.lastIndexOf( "//") + 1;
- File file = new File(savePath,filename.substring( pos ) );
- try {
- item.write(file);
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
package sample.server;
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");
		response.setCharacterEncoding("utf-8");
		FileItemFactory factory = new DiskFileItemFactory();
		ServletFileUpload upload = new ServletFileUpload(factory);
List items = null;
try {
			items = upload.parseRequest(request);
		}
		catch (FileUploadException ex) {
			ex.printStackTrace();
		}
Iterator iter = items.iterator();
while (iter.hasNext()) {
			FileItem item = (FileItem) iter.next();
String savePath = getServletContext().getRealPath("/uploads");
String filename = item.getName();
String filename2 = filename.replaceAll("/", "//");
			int pos = filename.lastIndexOf( "//") + 1;
File file = new File(savePath,filename.substring( pos ) );
try {
				item.write(file);
			}
			catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}
最后 最重要的一步!! 打开web.xml 加入
- <servlet>
- <servlet-name>uploadServlet</servlet-name>
- <servlet-class>sample.server.FileUploadServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>uploadServlet</servlet-name>
- <url-pattern>/login/fileupload</url-pattern>
- </servlet-mapping>
<servlet>
    <servlet-name>uploadServlet</servlet-name>
    <servlet-class>sample.server.FileUploadServlet</servlet-class>
  </servlet>
<servlet-mapping>
    <servlet-name>uploadServlet</servlet-name>
    <url-pattern>/login/fileupload</url-pattern>
  </servlet-mapping>
两个servlet-name 相同即可 而servlet-class对应之前添加的服务,url-pattern对应 client端中的
formpanel.setAction( GWT.getModuleBaseURL() + "fileupload" );
打开 xxx.gwt.xml 加入 :<servlet class="sample.server.FileUploadServlet" path="/fileupload" />
class 和 path也是对应的,别搞错啦,不然会悲剧的
好吧可以运行试试了,下面看download
download简单一点点,client中代码:
- void download( String filename ) {
- if( RootPanel.get("downloadiframe") != null ) {
- Widget widgetFrame = (Widget)RootPanel.get("downloadiframe");
- widgetFrame.removeFromParent();
- }
- Frame frame = new Frame( GWT.getModuleBaseURL() + "filedownload" + "?id=downloadiframe"+
- "&filename=" + filename );
- frame.setVisible( false );
- frame.setSize( "0px", "0px" );
- RootPanel.get().add( frame );
- }
void download( String filename ) {
		if( RootPanel.get("downloadiframe") != null ) {
			Widget widgetFrame = (Widget)RootPanel.get("downloadiframe");
			widgetFrame.removeFromParent();
		}
		Frame frame = new Frame( GWT.getModuleBaseURL() + "filedownload" + "?id=downloadiframe"+
				"&filename=" + filename );
		frame.setVisible( false );
		frame.setSize( "0px", "0px" );
		RootPanel.get().add( frame );
}
同样新建一个 DownloadServlet.java 有了之前的经验相信大家应该找到点头绪了吧? 代码:
- package sample.server;
- import java.io.BufferedInputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import com.google.gwt.core.client.GWT;
- import com.google.gwt.user.client.ui.Frame;
- public class DownloadServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- protected void doGet( HttpServletRequest req, HttpServletResponse resp )
- throws ServletException, IOException
- {
- //此函数对应之前的 Frame frame =
- //new Frame( GWT.getModuleBaseURL() + "filedownload" + "?id=downloadiframe"+"&filename=" + filename );
- //传文件名那个简单啊
- String filename = req.getParameter("filename");
- //这边你要自己决定从哪下载的文件!! 我是把上传路径直接给他了
- //这里说下。。我先前没自己创建 uploads 结果十分悲剧
- //记得在 war 路径下创建 !!
- String filepath = req.getRealPath("/uploads");
- File file = new File( filepath+"/"+filename );
- //下面代码从网上拉的,直接抄就行了
- FileInputStream fis = new FileInputStream(file);
- resp.addHeader("Content-Disposition","attachment; filename=" + filename );
- ServletOutputStream out = resp.getOutputStream();
- resp.setBufferSize(32768);
- int bufSize = resp.getBufferSize();
- byte[] buffer = new byte[bufSize];
- BufferedInputStream bis = new BufferedInputStream(fis,bufSize);
- int bytes;
- while ((bytes = bis.read(buffer, 0, bufSize)) >= 0)
- out.write(buffer, 0, bytes);
- bis.close();
- fis.close();
- out.flush();
- out.close();
- }
- }
package sample.server;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.Frame;
public class DownloadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
protected void doGet( HttpServletRequest req, HttpServletResponse resp )
		throws ServletException, IOException
	{
		//此函数对应之前的 Frame frame =
		//new Frame( GWT.getModuleBaseURL() + "filedownload" + "?id=downloadiframe"+"&filename=" + filename );
		//传文件名那个简单啊
		String filename = req.getParameter("filename");
//这边你要自己决定从哪下载的文件!! 我是把上传路径直接给他了
		//这里说下。。我先前没自己创建 uploads 结果十分悲剧
		//记得在 war 路径下创建 !!
		String filepath = req.getRealPath("/uploads");
		File file = new File( filepath+"/"+filename );
//下面代码从网上拉的,直接抄就行了
		FileInputStream fis = new FileInputStream(file);
		resp.addHeader("Content-Disposition","attachment; filename=" + filename );
ServletOutputStream out = resp.getOutputStream();
		resp.setBufferSize(32768);
		int bufSize = resp.getBufferSize();
		byte[] buffer = new byte[bufSize];
		BufferedInputStream bis = new BufferedInputStream(fis,bufSize);
int bytes;
		while ((bytes = bis.read(buffer, 0, bufSize)) >= 0)
			out.write(buffer, 0, bytes);
		bis.close();
		fis.close();
		out.flush();
		out.close();
	}
}
配置两个xml和upload是一样的,注意别拼错字母了呀!!!!
GWT 实现文件上传和下载的更多相关文章
- java web学习总结(二十四) -------------------Servlet文件上传和下载的实现
		在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ... 
- (转载)JavaWeb学习总结(五十)——文件上传和下载
		源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ... 
- JavaWeb学习总结,文件上传和下载
		在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ... 
- java文件上传和下载
		简介 文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ... 
- 使用jsp/servlet简单实现文件上传与下载
		使用JSP/Servlet简单实现文件上传与下载 通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ... 
- JavaWeb学习总结(五十)——文件上传和下载
		在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ... 
- 文件上传和下载(可批量上传)——Spring(三)
		在文件上传和下载(可批量上传)——Spring(二)的基础上,发现了文件下载时,只有在Chrome浏览器下文件名正常显示,还有发布到服务器后,不能上传到指定的文件夹目录,如上传20160310.txt ... 
- 文件上传和下载(可批量上传)——Spring(二)
		针对SpringMVC的文件上传和下载.下载用之前“文件上传和下载——基础(一)”的依然可以,但是上传功能要修改,这是因为springMVC 都为我们封装好成自己的文件对象了,转换的过程就在我们所配置 ... 
- Struts2 之 实现文件上传和下载
		Struts2 之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ... 
随机推荐
- poj 3185 The Water Bowls
			The Water Bowls 题意:给定20个01串(最终的状态),每个点变化时会影响左右点,问最终是20个0所需最少操作数? 水题..直接修改增广矩阵即可:看来最优解不是用高斯消元(若是有Gaus ... 
- 转载:Source Insight查看ARM汇编源程序 && 高亮显示程序 && Source Insight打开project窗口出错
			(1)Source Insight查看ARM汇编源程序.做ARM嵌入式开发时,有时得整汇编代码,但在SIS里建立PROJECT并ADD TREE的时候,根据默认设置并不会把该TREE里面所有汇编文件都 ... 
- POJ 3273 Monthly Expense 二分枚举
			题目:http://poj.org/problem?id=3273 二分枚举,据说是经典题,看了题解才做的,暂时还没有完全理解.. #include <stdio.h> #include ... 
- 从 IT 的角度思考 BIM(一):面向对象
			还记得那个笑话吗:要把大象放进冰箱,总共分几步?这不仅仅是一个笑话,还是一个值得我们好好分析的笑话. 如果要放进冰箱的是一个苹果,那么也就不可笑了,但换成大象,就引起了我们的兴趣和注意,为什么? 我们 ... 
- 和阿木聊Node.js
			npm:node.js官方库 cnpm:taobao维护的库: WebStorm:Node.js的开发工具,但是收费: seajs:还有一款交requirjs,前者是遵循amd规范(一次性参数中加载要 ... 
- 一个Bootstrap风格的分页控件
			http://www.cnblogs.com/wangwei123/p/3682626.html 主题 jQueryBootstrap 一个Bootstrap风格的分页控件,对于喜欢Bootstr ... 
- bzoj 3720: Gty的妹子树 块状树
			3720: Gty的妹子树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 412 Solved: 153[Submit][Status] Descr ... 
- 降维(二)----Laplacian Eigenmaps
			降维(二)----Laplacian Eigenmaps 降维系列: 降维(一)----说说主成分分析(PCA)的源头 降维(二)----Laplacian Eigenmaps ----------- ... 
- hdu 1281
			二分图,简单的模板题,不过题目比较难懂: 其中important chess就是删掉它不能够完美匹配,所以就枚举每一个可能删的棋子: 代码: #include <cstdio> #incl ... 
- 关于路由、AP、交换机的小总结
			整理自关于路由.AP.交换机的小总结 要将各种设备连成网络,一般运用网络中的两层,即第二层的数据链路层和第三层的网络层.而设备之间需要通信就需要各自的网络地址. 第二层设备有物理地址即MAC地址,这对 ... 
