- 浏览: 1275295 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (499)
- java (101)
- linux (82)
- mysql (30)
- javascript (45)
- Oracle (12)
- ext (14)
- 虚拟机 (1)
- 搜索引擎 (2)
- struts2 (11)
- 设计模式 (9)
- nginx (17)
- tomcat (12)
- 随想 (10)
- spring (18)
- svn (1)
- flash (3)
- UML (1)
- 数据结构 (7)
- 算法 (2)
- 网摘 (9)
- 数据库 (15)
- ibatis (3)
- jquery (31)
- lucene (1)
- hibernate (14)
- Myeclipse (4)
- 线程 (7)
- jbpm (4)
- 重构 (1)
- mantis (3)
- MediaWiki (4)
- ExtMail (1)
- MDaemon (1)
- egit (1)
- dwr (7)
- sitemesh (2)
- mybatis (1)
- ico (1)
- hadoop (5)
- jsoup (1)
- urlrewrite (2)
- jstl (1)
- spring3 (2)
- aop (2)
- 定时器 (1)
- Quartz (2)
- apache (1)
- php (1)
- security (1)
- iptables (2)
- QQ (1)
- mysqldump (1)
- vim (1)
- memcached (4)
- jad (1)
- 微博 (1)
- html5 (1)
- css3 (1)
- httpclient (10)
- google (1)
- shortUrl (1)
- json (2)
- virtualBox (1)
- mantisBT (2)
- htmlunit (1)
- selenium (2)
- mail (1)
- 正则表达式 (4)
- html (3)
- css (2)
- jatoolsPrinter (1)
- 图片处理 (1)
- hql (1)
- webservice (1)
- 分词 (3)
- 短信 (1)
- VPS (1)
- 事务 (1)
- 广告 (1)
- 画廊 (1)
- git (3)
- github (1)
- openshift (1)
- 缓存 (1)
- web (3)
- android (3)
- c3p0 (1)
- 邮箱 (1)
- memcache (2)
- windows (2)
- js (14)
- 编辑器 (1)
- 打印 (1)
- centos (5)
- boneCP (1)
- 连接池 (1)
- sql (1)
- nosql (1)
- MongoDB (1)
- 浏览器 (1)
- node (1)
- node.js (1)
- backbone.js (1)
- lazyload (1)
- Switch Off (1)
- Titanium (1)
- 网站架构 (1)
- WebDriver (1)
- APJP (1)
- 代理 (1)
- comet (1)
- kendoui (1)
- UI (2)
- 互联网 (1)
- localStorage (1)
- 记录 (1)
- 微信 (2)
- Sphinx (1)
- netty (1)
- js,mvvm,Avalon (1)
- 安卓 (1)
- Tengine (1)
- 大数据 (1)
- 手机 (1)
- paypal (1)
- SaaS (1)
- gitlab (1)
- nodejs (1)
- React (1)
- shadowsocks (0)
- vpn (0)
- 验证码 (1)
- SSL (2)
- SEO (1)
- IntelliJ (1)
- 敏捷开发 (1)
- 项目管理 (1)
- 爬虫 (1)
- 正则 (1)
- owncloud (1)
- 云存储 (1)
- ajax (1)
- pjax (1)
- jdk (1)
- zookeeper (1)
- phantomjs (1)
- ELK (1)
- springcloud (1)
- IDEA (1)
- hexo (1)
- ss (1)
- letencrypt (1)
最新评论
-
peakandyuri:
这个是有BUG的,数字小体现不出来,数字大了就不对了,但是Ja ...
java十进制转换N进制并反转换的工具类 -
ginolai:
然后是相关配置:/etc/sysconfig/iptables ...
Linux中iptables设置详细 -
bzhao:
我测试没啥区别啊!
Thread.sleep()和Thread.currentThread().sleep()区别 -
zhl549342097:
match == false
Spring Security 3.1 中功能强大的加密工具 PasswordEncoder -
hellotieye:
renzhengzhi 写道drager 写道用jsoup后解 ...
jsoup select 选择器
哎,首先发泄一下情绪。。。这个fileupload搞了我一天时间,为何???问题出在我查看ext-3.1.1\examples\form\file-upload.html的时候发现它的例子有BUG。。。去ext的官方论坛看了下这问题不小,好多人遇到。。。
是个什么BUG呢?
我完全按照file-upload.html的例子做完发现当我设置fileUpload: true后上传文件后居然返回json解析出错...然后进行debug...发现由于ext的FileUploadField是伪ajax上传的做法,也就是生成了个frame,造成返回json后解析出其他一些内容,更奇怪的是各个浏览器解析的内容并不相同- -,泪流满面。。。
查看了下国外论坛,这方面的BUG报的不少,解决基本没有介绍。。。或者试了失败。。。
算了自己调试吧,经过调试,使用response.setContentType("text/html;charset=utf-8");后会莫名多出很多html代码在json中,换成response.setContentType("text/plain;charset=utf-8");以后火狐多了<pre>json对象</pre>,IE7多了<PRE>json对象</PRE>,Opera多了<PRE>json对象,很奇怪Opera并没有</PRE>标签。。。其他浏览器没有查,估计也就差不多是pre这个标签。。。
算了 看来只有修改下源码把pre标签去掉才能正确解析json了。。。
来看代码吧:(自己导入json相关包以及ext相关js和css)
先上jsp:
<%@ page language="java" pageEncoding="UTF-8"%> <%@ include file="/common/taglib.jsp"%> <html> <head> <script type="text/javascript"> var contextPath = '${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}'; </script> //新加入uploadfile必须的2个文件----fileuploadfield.css和FileUploadField.js都在ext-3.1.1\examples\ux\fileuploadfield目录下 <link rel="stylesheet" type=text/css href="${ctxPath }/styles/fileuploadfield.css" /> <script type="text/javascript" src="${ctxPath }/scripts/fileupload/FileUploadField.js"></script> <script type="text/javascript"> Ext.onReady(function(){ Ext.QuickTips.init(); var fp = new Ext.FormPanel({ renderTo: 'fi-form', fileUpload: true,//要上传必须的属性 width: 500, frame: true, title: 'File Upload Form', autoHeight: true, bodyStyle: 'padding: 10px 10px 0 10px;', labelWidth: 50, defaults: { anchor: '95%', allowBlank: false, msgTarget: 'side' }, items: [{ xtype: 'hidden', name: 'path', value: "file\\" },{ xtype: 'fileuploadfield', id: 'form-file', emptyText: 'Select an image', fieldLabel: 'Photo', name: 'myUpload',//与struts1的form的FormFile属性相对应 buttonText: '浏览' //buttonCfg: { //iconCls: 'upload-icon' //} }], buttons: [{ text: 'Save', handler: function(){ if(fp.getForm().isValid()){ fp.getForm().submit({ url: contextPath + '/search.do?method=uploadFile', waitMsg: 'Uploading your photo...', success: function(fp, o){ alert(o.result.message); } }); } } },{ text: 'Reset', handler: function(){ fp.getForm().reset(); } }] }); }); </script> </head> <body> <div id="fi-form"></div> </body> </html>
后台searchAction的方法:
public static final String ROOT = "upload\\"; public ActionForward uploadFile(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { SearchForm searchForm = (SearchForm)form; String myUploadFileName = searchForm.getMyUpload().getFileName(); System.out.println(myUploadFileName); String path = request.getParameter("path"); System.out.println(path); String rootPath = getServlet().getServletContext().getRealPath("/"); rootPath += ROOT; String sp = rootPath + path; System.out.println(sp); MyUtils.mkDirectory(sp); try { //此处借用了lhq的Util类 MyUtils.upload(myUploadFileName, sp, searchForm.getMyUpload()); } catch (RuntimeException e) { e.printStackTrace(); } MessageVO vo = new MessageVO(); vo.setMessage("aaa"); //务必要加上success属性以便ext识别 vo.setSuccess(true); JSONObject object = JSONObject.fromObject(vo);//注意使用text/plain而不要使用text/html或者text/xml response.setContentType("text/plain;charset=utf-8"); response.getWriter().write(object.toString()); return null; }
MessageVO.java:
package com.xuyi.vo; public class MessageVO { boolean success; String message; public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
SearchForm.java:
package com.xuyi.web.form; import org.apache.struts.upload.FormFile; public class SearchForm extends BaseForm { /** * */ private static final long serialVersionUID = -2466145267901361949L; FormFile myUpload; public FormFile getMyUpload() { return myUpload; } public void setMyUpload(FormFile myUpload) { this.myUpload = myUpload; } }
MyUtils.java:
package com.xuyi.util; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.struts.upload.FormFile; public class MyUtils { /** * 上传文件 * * @param savePath * 文件的保存路径 * @param uploadFile * 被上传的文件 * @return newFileName */ public static String upload(String uploadFileName, String savePath, FormFile uploadFile) { String newFileName = getUUIDName(uploadFileName, savePath); FileOutputStream fos = null; InputStream fis = null; try { fos = new FileOutputStream(savePath + newFileName); fis = uploadFile.getInputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = fis.read(buffer)) > 0) { fos.write(buffer, 0, len); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { fos.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } } return newFileName; } public static String getUUIDName(String fileName, String dir) { String[] split = fileName.split("\\."); String extendFile = "." + split[split.length - 1].toLowerCase(); return java.util.UUID.randomUUID().toString() + extendFile; } /** * 根据路径创建一系列的目录 * * @param path */ public static boolean mkDirectory(String path) { File file = null; try { file = new File(path); if (!file.exists()) { return file.mkdirs(); } } catch (RuntimeException e) { e.printStackTrace(); } finally { file = null; } return false; } }
最后附上解决方案:
首先后台的response注意使用text/plain而不要使用text/html或者text/xml
response.setContentType("text/plain;charset=utf-8");
然后修改ext-all.js中以下代码:
doDecode = function(json){ //加入部分begin if(json.indexOf('<pre>') != -1 || json.indexOf('<PRE>') != -1 ){ json = json.replace('<pre>','').replace('<PRE>','').replace('</pre>','').replace('</PRE>',''); } //加入部分end return eval("(" + json + ')'); }
纯粹个人意见,刚接触ext有不足之处请大家多多指点,还有哪位有更好的解决方法也请说下,请教了!
评论
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.write(json);
JsonUtil.jsonFailResponse("上传失败,请与管理员联系!", request, response);
用setContentType("text/html;charset=UTF-8")
之前那个是application/x-json 直接下载了 用这个就没问题 具体原因待查 哪个高人也可以给个解释
text/html 我早用过了 某些情况下是不行的 你可以多试试
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.write(json);
JsonUtil.jsonFailResponse("上传失败,请与管理员联系!", request, response);
用setContentType("text/html;charset=UTF-8")
之前那个是application/x-json 直接下载了 用这个就没问题 具体原因待查 哪个高人也可以给个解释
照你的方法修改了,可以了。
谢谢
不客气 有问题大家交流才能进步
照你的方法修改了,可以了。
谢谢
发表评论
-
Ext中文官网
2011-12-07 15:01 2235http://extjs.org.cn/ -
[转]EXT设计器破解2.X版本
2011-11-22 09:38 1003找了半天也只有2.X的破解版,凑合玩玩吧。。。 详细见:ht ... -
EXT 3.x 使用详解之Ext.Direct(二)---polling,简单实现网页聊天功能
2010-04-16 00:56 4238看了下Ext.Direct的polling功能还是封装的不错的 ... -
EXT 3.x 使用详解之Ext.Direct(一)
2010-04-15 16:36 3985感觉EXT3.x增加的最好的功能之一就是这个Ext.Direc ... -
引用一下:EXT调试功能
2010-04-14 22:21 2473在ExtJS开发过程中,经常会遇到怎么也找不到错误的时候,这时 ... -
EXT 3.x 使用详解之Ext.History浏览器前进后退功能(二)--整合grid分页
2010-04-14 17:08 2247这篇是针对我以前所写的一个例子进行了对history的修改,修 ... -
EXT 3.x 使用详解之Ext.History浏览器前进后退功能(一)
2010-04-14 11:02 3502先来做个例子吧,这里写一个ext官方的例子,注意注释: &l ... -
EXT 3.x 使用详解之Ext.Viewport综合使用(一)
2010-04-07 16:59 8843本篇介绍了排序自定义,排版布局,以及对ext树和ext的gri ... -
EXT 3.x 使用详解之Ext.grid.GridPanel(三)
2010-04-07 16:05 2432本篇主要介绍了grid的ajax功能以及分页标签功能,具体看代 ... -
EXT 3.x 使用详解之Ext.grid.GridPanel(二)
2010-04-07 15:49 4959本篇主要讲解了grid如何自动调整大小,以便在我们窗口发生变化 ... -
EXT 3.x 使用详解之Ext.grid.GridPanel(一)
2010-04-01 17:59 2177很强大的grid总算登场啦,先来热热身,看下最简单的应用,详细 ... -
EXT 3.x 使用详解之Ext.Window
2010-04-01 17:06 2712这个是最基础的ext使用了,首先先确定要引入source里面哪 ... -
开始研究ext,使用心得
2010-04-01 16:53 1442经过几天的学习和实验,了解到,基本上ext的框架还是十分方便的 ...
相关推荐
### 文件上传控件FileUpload知识点详解 #### 一、FileUpload控件简介 在Web开发中,文件上传是一项常见的功能需求。ASP.NET提供了内置的`FileUpload`控件来简化文件上传的操作流程。该控件允许用户选择一个或多个...
### extjs-form组件配置参数详解 #### 一、Ext.form.Action `Ext.form.Action`是ExtJS中的一个类,用于处理表单提交和加载数据的动作。它提供了多种配置选项和属性来控制表单操作的过程。 **配置项** - **success*...
### SSH2上传实现详解 #### 一、概述 在现代Web开发中,文件上传是常见的需求之一。本文将详细介绍如何利用SSH2(Struts2 + Spring + Hibernate)框架结合ExtJS前端库实现文件上传功能。具体包括前端界面设计、...
### Extjs 属性方法详解 #### 一、`Ext.form.Action` 类 `Ext.form.Action` 是用于处理表单操作的类,主要包括提交和加载数据的功能。 - **属性:** - `success`: 表示操作成功时的回调函数。 - `failure`: ...
你可以使用诸如Apache Commons FileUpload库来解析请求并保存上传的图片。此外,后端还需要处理错误,如文件大小限制、文件类型检查等。 6. **文件存储**:上传的图片会被保存在服务器的某个目录下,可能需要设定...
在Struts框架下,通常使用`<form>`标签的`enctype="multipart/form-data"`属性来支持文件上传,配合Struts的`File`和`FileUpload`组件处理文件流。在服务器端,会将上传的文件保存到指定的目录,并记录相关信息。 5...
本文将详细介绍一个基于Servlet的多文件上传示例,该示例使用了Apache Commons FileUpload库来简化文件上传过程。下面将从以下几个方面进行详细解释: 1. **环境配置与依赖** 2. **ServletFileUpload类简介** 3. **...
3. **FileReader API**:现代浏览器提供的API,可以读取用户选择的文件内容。 4. **Base64编码**:一种将二进制数据转换为文本字符串的标准方法,在本例中用于显示本地文件。 #### 三、实现过程详解 ##### 1. 页面...
该方法需要使用`@RequestParam`注解来接收上传的文件,并调用`MultipartFile`接口提供的方法来获取文件内容并保存到服务器。以下是一个简单的示例: ```java import org.springframework.stereotype.Controller; ...
表单提交后,通过POST方法将数据发送到`UploadServlet`,这里使用了Apache Commons FileUpload库来处理多部分请求,将上传的文件保存到服务器的指定目录,并将相关信息存入XML数据库。 2. 文件下载:用户可以浏览...