浏览 6047 次
锁定老帖子 主题:GXT 文件上传
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-20
关于GWT的文件上传网上有封装比较好的例子 大家可以搜索:gwtextux。 gwtextux是基于GWT-EXT开发的。本文写的是针对GXT组件开发的文件上传例子。
GXT 文件上传主要分五步:
第一步,设置Form的提交属性
// 选择上传路径 form FormPanel formPanel = new FormPanel (); // 设置form参数MULTIPART formPanel.setEncoding (FormPanel.Encoding.MULTIPART); // 设置提交方式POST formPanel.setMethod (FormPanel.Method.POST); // 设置上传请求地址 formPanel.setAction ("fileupload.do");
第二步:添加上传组件
// 文件选择 FileUploadField fileUploadField = new FileUploadField (); fileUploadField.setFieldLabel ("请选择上传文件"); fileUploadField.setName ("file");
第三步:提交按钮
Button button = new Button ("上传"); button.addListener (Events.OnClick, new Listener <BaseEvent> () { @Override public void handleEvent (BaseEvent be) { formPanel.submit (); }
第四步:后台接受上传流的Servlet
public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取上传句柄 ServletFileUpload upload = new ServletFileUpload (); FileItemIterator iter; HttpSession session = request.getSession (); // 获取文件长度 String fileSizeString = request.getHeader ("Content-Length"); //将文件长度转化为数字 String sourceidString = null; try { // 从request中获取参数 iter = upload.getItemIterator (request); while (iter.hasNext ()) { FileItemStream item = iter.next (); // 资源名称 if (TermStrings.SOURCE_FILED.equals (item.getFieldName ())) { InputStream stream = item.openStream (); sourceidString = Streams.asString (stream, "utf-8"); } // 获取文件输入流 if ("file".equals (item.getFieldName ())) { // 获得系统时间 BufferedInputStream bin = new BufferedInputStream (item.openStream ()); // 获得文件路径 String filePath = getServletContext ().getRealPath ("后台存储文件.xls"); File file = new File (filePath); // 创建写文件的流 BufferedOutputStream bout = new BufferedOutputStream (new FileOutputStream (file)); byte[] b = new byte[8 * 1024]; int i = bin.read (b); while (i > 0) { //写入文件 bout.write (b, 0, i); i = bin.read (b); } bout.flush (); bout.close (); 第五步:web.xml
<servlet-mapping> <servlet-name>FileUpload</servlet-name> <url-pattern>/fileupload.do</url-pattern> </servlet-mapping> <servlet> <servlet-name>FileUpload</servlet-name> <servlet-class>net.carefx.term.server.servlet.FileUpload</servlet-class> </servlet>
如果要实现读取进度,我的做法是时间轮训,通过后台获取文件长度: String fileSizeString = request.getHeader ("Content-Length"); 总长度,然后根据文件写入流的写入次数判断写入的百分比。将此数据在前台显示。 文件上传需要使用第三方jar包
commons-fileupload-1.2.1.jar 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-12-27
前面写得挺好的,后台那段代码不敢恭维。
既然用了fileupload ,你就使用它提供的方法呀,何必自己“纯手工”再写一次。 String path = req.getSession().getServletContext().getRealPath("/"); FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List items = null; try { items = upload.parseRequest(req); } catch (FileUploadException e) { e.printStackTrace(); return ; } Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.getName() == null || item.getName().trim().equals("")) continue; String filename = getFileName(); if ( ! item.isFormField()) { File uploadedFile = new File("replace with your file name"); try { item.write(uploadedFile); } catch (Exception e) { e.printStackTrace(); return null; } } } 你看,还支持同时上传多个文件。 推荐 使用 swfupload |
|
返回顶楼 | |
发表时间:2010-12-27
lovexp2010 写道 前面写得挺好的,后台那段代码不敢恭维。
既然用了fileupload ,你就使用它提供的方法呀,何必自己“纯手工”再写一次。 String path = req.getSession().getServletContext().getRealPath("/"); FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List items = null; try { items = upload.parseRequest(req); } catch (FileUploadException e) { e.printStackTrace(); return ; } Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.getName() == null || item.getName().trim().equals("")) continue; String filename = getFileName(); if ( ! item.isFormField()) { File uploadedFile = new File("replace with your file name"); try { item.write(uploadedFile); } catch (Exception e) { e.printStackTrace(); return null; } } } 你看,还支持同时上传多个文件。 推荐 使用 swfupload 谢谢,学习了。我之前手工写流是想做上传进度展示。 |
|
返回顶楼 | |
发表时间:2011-01-09
Lz可以考虑一下GWTupload这个上传组件解决上传进度条的问题。
我在项目就是用这个组件来实现的。 但是这个组件好像有个bug,就是该组件的重置功能有点问题。。 |
|
返回顶楼 | |
发表时间:2011-02-10
原来整这个 整了个多附件上传
|
|
返回顶楼 | |
发表时间:2011-02-17
恩,2010的后台代码简洁明了,很不错。学习了...刚开始学习EXT,还有许多问题不明白,持续学习ing
|
|
返回顶楼 | |
发表时间:2011-03-13
請問,如何自動產生上傳後的影片縮圖?
|
|
返回顶楼 | |
发表时间:2011-03-14
kannif2005 写道 請問,如何自動產生上傳後的影片縮圖?
我没有做过类似工作,但是我想生产缩略图的操作应该是后台java实现,然后将缩略图返回给前台。 |
|
返回顶楼 | |