首先下载两个包 commons-fileupload-?.jar和commons-io-?.jar  将他们配置到你的项目中

先把它们放在 "项目名/war/WEB-INF/lib" 中,之后直接在 properties 中加入到项目中(没配置过可以去网上查eclipse配置jar的方法,很简单的)

之后就开始啦,client 端代码:

  1. final FileUpload fileUpload = new FileUpload();
  2. final FormPanel formpanel = new FormPanel();
  3. fileUpload.setName("uploadFormElement");
  4. formpanel.setEncoding( FormPanel.ENCODING_MULTIPART );
  5. formpanel.setMethod( FormPanel.METHOD_POST );
  6. formpanel.setAction( GWT.getModuleBaseURL() + "fileupload" );
  7. formpanel.setWidget( fileUpload );
  8. uploadbutton.addClickHandler( new ClickHandler() {
  9. public void onClick( ClickEvent sender ) {
  10. formpanel.submit();
  11. }
  12. });
  13. formpanel.addSubmitHandler( new SubmitHandler() {
  14. public void onSubmit(SubmitEvent event) {
  15. if( fileUpload.getFilename().length() == 0 ) {
  16. Window.alert( "you must select a file" );
  17. }
  18. }
  19. });
  20. formpanel.addSubmitCompleteHandler( new SubmitCompleteHandler() {
  21. public void onSubmitComplete(SubmitCompleteEvent event) {
  22. //兼容linux文件分隔符?
  23. String selected = fileUpload.getFilename().replaceAll("/", "//");
  24. selected = selected.substring( selected.lastIndexOf("//")+1);
  25. Window.alert( "upload complete"+ event.getResults());
  26. }
  27. });

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

  1. package sample.server;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import org.apache.commons.fileupload.FileItem;
  11. import org.apache.commons.fileupload.FileItemFactory;
  12. import org.apache.commons.fileupload.FileUploadException;
  13. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  14. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  15. public class FileUploadServlet extends HttpServlet {
  16. private static final long serialVersionUID = 1L;
  17. @Override
  18. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  19. throws ServletException, IOException {
  20. // TODO Auto-generated method stub
  21. response.setContentType("text/html");
  22. response.setCharacterEncoding("utf-8");
  23. FileItemFactory factory = new DiskFileItemFactory();
  24. ServletFileUpload upload = new ServletFileUpload(factory);
  25. List items = null;
  26. try {
  27. items = upload.parseRequest(request);
  28. }
  29. catch (FileUploadException ex) {
  30. ex.printStackTrace();
  31. }
  32. Iterator iter = items.iterator();
  33. while (iter.hasNext()) {
  34. FileItem item = (FileItem) iter.next();
  35. String savePath = getServletContext().getRealPath("/uploads");
  36. String filename = item.getName();
  37. String filename2 = filename.replaceAll("/", "//");
  38. int pos = filename.lastIndexOf( "//") + 1;
  39. File file = new File(savePath,filename.substring( pos ) );
  40. try {
  41. item.write(file);
  42. }
  43. catch (Exception e) {
  44. e.printStackTrace();
  45. }
  46. }
  47. }
  48. }

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 加入

  1. <servlet>
  2. <servlet-name>uploadServlet</servlet-name>
  3. <servlet-class>sample.server.FileUploadServlet</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>uploadServlet</servlet-name>
  7. <url-pattern>/login/fileupload</url-pattern>
  8. </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中代码:

  1. void download( String filename ) {
  2. if( RootPanel.get("downloadiframe") != null ) {
  3. Widget widgetFrame = (Widget)RootPanel.get("downloadiframe");
  4. widgetFrame.removeFromParent();
  5. }
  6. Frame frame = new Frame( GWT.getModuleBaseURL() + "filedownload" + "?id=downloadiframe"+
  7. "&filename=" + filename );
  8. frame.setVisible( false );
  9. frame.setSize( "0px", "0px" );
  10. RootPanel.get().add( frame );
  11. }

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 有了之前的经验相信大家应该找到点头绪了吧? 代码:

  1. package sample.server;
  2. import java.io.BufferedInputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletOutputStream;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import com.google.gwt.core.client.GWT;
  12. import com.google.gwt.user.client.ui.Frame;
  13. public class DownloadServlet extends HttpServlet {
  14. private static final long serialVersionUID = 1L;
  15. protected void doGet( HttpServletRequest req, HttpServletResponse resp )
  16. throws ServletException, IOException
  17. {
  18. //此函数对应之前的 Frame frame =
  19. //new Frame( GWT.getModuleBaseURL() + "filedownload" + "?id=downloadiframe"+"&filename=" + filename );
  20. //传文件名那个简单啊
  21. String filename = req.getParameter("filename");
  22. //这边你要自己决定从哪下载的文件!! 我是把上传路径直接给他了
  23. //这里说下。。我先前没自己创建 uploads 结果十分悲剧
  24. //记得在 war 路径下创建 !!
  25. String filepath = req.getRealPath("/uploads");
  26. File file = new File( filepath+"/"+filename );
  27. //下面代码从网上拉的,直接抄就行了
  28. FileInputStream fis = new FileInputStream(file);
  29. resp.addHeader("Content-Disposition","attachment; filename=" + filename );
  30. ServletOutputStream out = resp.getOutputStream();
  31. resp.setBufferSize(32768);
  32. int bufSize = resp.getBufferSize();
  33. byte[] buffer = new byte[bufSize];
  34. BufferedInputStream bis = new BufferedInputStream(fis,bufSize);
  35. int bytes;
  36. while ((bytes = bis.read(buffer, 0, bufSize)) >= 0)
  37. out.write(buffer, 0, bytes);
  38. bis.close();
  39. fis.close();
  40. out.flush();
  41. out.close();
  42. }
  43. }

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 实现文件上传和下载的更多相关文章

  1. java web学习总结(二十四) -------------------Servlet文件上传和下载的实现

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  2. (转载)JavaWeb学习总结(五十)——文件上传和下载

    源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...

  3. JavaWeb学习总结,文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  4. java文件上传和下载

    简介 文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...

  5. 使用jsp/servlet简单实现文件上传与下载

    使用JSP/Servlet简单实现文件上传与下载    通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...

  6. JavaWeb学习总结(五十)——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  7. 文件上传和下载(可批量上传)——Spring(三)

    在文件上传和下载(可批量上传)——Spring(二)的基础上,发现了文件下载时,只有在Chrome浏览器下文件名正常显示,还有发布到服务器后,不能上传到指定的文件夹目录,如上传20160310.txt ...

  8. 文件上传和下载(可批量上传)——Spring(二)

    针对SpringMVC的文件上传和下载.下载用之前“文件上传和下载——基础(一)”的依然可以,但是上传功能要修改,这是因为springMVC 都为我们封装好成自己的文件对象了,转换的过程就在我们所配置 ...

  9. Struts2 之 实现文件上传和下载

    Struts2  之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ...

随机推荐

  1. poj 3185 The Water Bowls

    The Water Bowls 题意:给定20个01串(最终的状态),每个点变化时会影响左右点,问最终是20个0所需最少操作数? 水题..直接修改增广矩阵即可:看来最优解不是用高斯消元(若是有Gaus ...

  2. 转载:Source Insight查看ARM汇编源程序 && 高亮显示程序 && Source Insight打开project窗口出错

    (1)Source Insight查看ARM汇编源程序.做ARM嵌入式开发时,有时得整汇编代码,但在SIS里建立PROJECT并ADD TREE的时候,根据默认设置并不会把该TREE里面所有汇编文件都 ...

  3. POJ 3273 Monthly Expense 二分枚举

    题目:http://poj.org/problem?id=3273 二分枚举,据说是经典题,看了题解才做的,暂时还没有完全理解.. #include <stdio.h> #include ...

  4. 从 IT 的角度思考 BIM(一):面向对象

    还记得那个笑话吗:要把大象放进冰箱,总共分几步?这不仅仅是一个笑话,还是一个值得我们好好分析的笑话. 如果要放进冰箱的是一个苹果,那么也就不可笑了,但换成大象,就引起了我们的兴趣和注意,为什么? 我们 ...

  5. 和阿木聊Node.js

    npm:node.js官方库 cnpm:taobao维护的库: WebStorm:Node.js的开发工具,但是收费: seajs:还有一款交requirjs,前者是遵循amd规范(一次性参数中加载要 ...

  6. 一个Bootstrap风格的分页控件

      http://www.cnblogs.com/wangwei123/p/3682626.html 主题 jQueryBootstrap 一个Bootstrap风格的分页控件,对于喜欢Bootstr ...

  7. bzoj 3720: Gty的妹子树 块状树

    3720: Gty的妹子树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 412  Solved: 153[Submit][Status] Descr ...

  8. 降维(二)----Laplacian Eigenmaps

    降维(二)----Laplacian Eigenmaps 降维系列: 降维(一)----说说主成分分析(PCA)的源头 降维(二)----Laplacian Eigenmaps ----------- ...

  9. hdu 1281

    二分图,简单的模板题,不过题目比较难懂: 其中important chess就是删掉它不能够完美匹配,所以就枚举每一个可能删的棋子: 代码: #include <cstdio> #incl ...

  10. 关于路由、AP、交换机的小总结

    整理自关于路由.AP.交换机的小总结 要将各种设备连成网络,一般运用网络中的两层,即第二层的数据链路层和第三层的网络层.而设备之间需要通信就需要各自的网络地址. 第二层设备有物理地址即MAC地址,这对 ...