`
guofengcn
  • 浏览: 51196 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2+extjs文件上传,提示下载问题解决

阅读更多

    用struts2+ext开发上传模块,上传文件成功,但总是在浏览器中有提示“下载”……

    而且发现前台的success和failure都没有执行到,打印json串一切正常……

   

    这就奇怪了~~~上网找原因……发现好多人遇到这种问题,按网上的说法一步一步的试,首先是在struts配置文件中加入:

<param name="contentType">text/html</param>

    还是没解决掉……

 

    换个方式,在action中直接写:

HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");

   试了下,还是不行……

   还有说把struts配置文件中的:<result type="json">中的json改为XXX的……没有去尝试!

 

    说正题,解决方式~

    经过无数次的尝试后发现,其实只要将Action中的返回值从SUCCESS改为NONE,并写……

public String execute() throws IOException{
       *******略******最后加上以下部分,struts配置文件正常,也不用配置text/html
,完全没有下载提示了……(不加入这个可能后续会有问题,暂时没涉及呢,涉及了再说……)
     HttpServletResponse response = ServletActionContext.getResponse();
       String msg = "{success:true}";
       response.getWriter().print(msg);
       return NONE;
}

    到现在为止,下载问题应该不会再出现了……

 

    谁能有更好的解决方式麻烦告诉我一下……

 

分享到:
评论
6 楼 guofengcn 2013-01-22  
jidu01 写道
你写的那个NONE 是什么?  我都是返回的null。

用的struts1, 一直用谷歌调试,数据已经入库,文件也上传上去了,但是前台一直的等待框一直在运行,后来用IE,试了一下,发现提示下载,然后改了 response 的contenntype,从text/json,改为text/html。貌似好了

这个是struts2的,已经是好几年前的东西了
5 楼 jidu01 2013-01-22  
你写的那个NONE 是什么?  我都是返回的null。

用的struts1, 一直用谷歌调试,数据已经入库,文件也上传上去了,但是前台一直的等待框一直在运行,后来用IE,试了一下,发现提示下载,然后改了 response 的contenntype,从text/json,改为text/html。貌似好了
4 楼 guofengcn 2011-09-16  
lockemn 写道
这位哥们,我最近也为这个问题郁闷了很久,终于解决了。
<param name="contentType">text/html</param> 
这种方法完全是可以的,出错了是因为jsonplugin jar包版本问题,0.31版本有Bug,在0.32版本中修复了这个问题。

以后试试!
3 楼 lockemn 2011-09-16  
这位哥们,我最近也为这个问题郁闷了很久,终于解决了。
<param name="contentType">text/html</param> 
这种方法完全是可以的,出错了是因为jsonplugin jar包版本问题,0.31版本有Bug,在0.32版本中修复了这个问题。
2 楼 guofengcn 2010-05-26  
wkq_361138880 写道
我试了你的第一个方法还解决了:firfox不再弹出下载对话框,序列化的action照样能接受,Ext form提交后的回调函数正常执行,谢了,呵呵
不知道你为什么没成功,我把重要代码,提出来,你自己对照看看,说不定能有所收获:
1.save action方法:
 public String save(){ 
        String oldImageName = request.getParameter("oldImageName"); //是否上传过,如果存在则删除   
        if (!"noImage".equalsIgnoreCase(oldImageName)) {     
            File oldFile = new File(ServletActionContext   
                .getServletContext().getRealPath("/")   
                + "UploadImages" + File.separator+oldImageName);   
            oldFile.delete();
        }   
        System.out.println(oldImageName); //为用户新上传的图片新取一个名字     
        try {
			user.setImage(writeFile("userPhoto"));
			userService.addUser(user);
		} catch (Exception e) {
			e.printStackTrace();
			message = e.getMessage();
			success = false;
			return NONE;
		}
        return NONE;
    }

2.action配置:
<result type="json" name="none">
				<param name="contentType">text/html;charset=utf-8</param>
				<param name="excludeProperties">
				    user.myQuestionses,user.messages,user.myNotes,user.taskPapers,
				    user.tasks,user.testPapers,user.articles
  				</param>
			</result>

3.Ext form提交
register:function(btn){
	    this.form.getForm().submit({
	       waitMsg: '正在加载,请稍等……',
	       waitTitle: '提示',
	       url:'json2/FileUpload_save_Json',
	       method: 'POST',
           scope:this,
	       success: function(form,action){
	           this.setUser(action.result.user.image);
	       },
	       failure: function(form, action) {
	           Ext.Msg.alert('提示', '系统出错,可能您的填写有错,请稍后再尝试上传!');
	       }
	   });
    },


你在return的时候都是返回的NONE,所以当然没有问题,我是想正常返回success,你试试把return设置成success,看会不会继续出下载的情况
1 楼 wkq_361138880 2010-05-21  
我试了你的第一个方法还解决了:firfox不再弹出下载对话框,序列化的action照样能接受,Ext form提交后的回调函数正常执行,谢了,呵呵
不知道你为什么没成功,我把重要代码,提出来,你自己对照看看,说不定能有所收获:
1.save action方法:
 public String save(){ 
        String oldImageName = request.getParameter("oldImageName"); //是否上传过,如果存在则删除   
        if (!"noImage".equalsIgnoreCase(oldImageName)) {     
            File oldFile = new File(ServletActionContext   
                .getServletContext().getRealPath("/")   
                + "UploadImages" + File.separator+oldImageName);   
            oldFile.delete();
        }   
        System.out.println(oldImageName); //为用户新上传的图片新取一个名字     
        try {
			user.setImage(writeFile("userPhoto"));
			userService.addUser(user);
		} catch (Exception e) {
			e.printStackTrace();
			message = e.getMessage();
			success = false;
			return NONE;
		}
        return NONE;
    }

2.action配置:
<result type="json" name="none">
				<param name="contentType">text/html;charset=utf-8</param>
				<param name="excludeProperties">
				    user.myQuestionses,user.messages,user.myNotes,user.taskPapers,
				    user.tasks,user.testPapers,user.articles
  				</param>
			</result>

3.Ext form提交
register:function(btn){
	    this.form.getForm().submit({
	       waitMsg: '正在加载,请稍等……',
	       waitTitle: '提示',
	       url:'json2/FileUpload_save_Json',
	       method: 'POST',
           scope:this,
	       success: function(form,action){
	           this.setUser(action.result.user.image);
	       },
	       failure: function(form, action) {
	           Ext.Msg.alert('提示', '系统出错,可能您的填写有错,请稍后再尝试上传!');
	       }
	   });
    },

相关推荐

    ExtJs4.2+Mysql+Struts2+Hibernate3实现分页查询

    ExtJs4.2+Mysql+Struts2+Hibernate3实现分页...以上信息我都在项目里面注明了,因为这些内容的文件太大了,CSDN不允许上传,而且也很容易找到,只要按照我在项目内提示的内容去增加这些依赖文件这个项目就能正常运行。

    extjs+struts+hibernate做的文件批量上传源代码

    在文件上传中,Struts接收前端ExtJS发送的文件数据,处理上传请求,调用服务层方法,将文件保存到服务器的指定位置,并将上传结果返回给前端。 3. Hibernate:这是Java领域的一个ORM(对象关系映射)框架,它简化了...

    ext struts2 swfupload 跨域文件上传

    "ext struts2 swfupload 跨域文件上传"这个主题涉及到三个关键技术和概念:EXTJS(Ext JS)、Struts2以及SwfUpload,它们共同解决了Web应用中的跨域文件上传问题。 EXTJS是一种强大的JavaScript库,用于构建富...

    struts2_extjs4.2_swfupload_progressbar实时上传进度条

    通过以上步骤,我们就成功地构建了一个基于Struts2、ExtJS4.2、SwfUpload和ProgressBar的实时文件上传进度条。这个系统不仅提供了良好的用户体验,还展示了前后端协同工作的能力。在实际项目中,还可以进一步优化,...

    ExtJS实现多文件上传UploadDialog For ExtJS3.x

    在本文中,我们将深入探讨如何使用ExtJS 3.x实现多文件上传功能,结合Struts2框架进行数据处理。首先,我们需要确保环境配置正确。在描述中提到,我们需要将一系列Struts2相关的库文件复制到项目的`WebContent\lib`...

    extjs与swfupload实现java文件批量上传 s2sh

    在文件上传中,Struts2的动作类可以接收上传的文件,进行验证、存储等操作。 **4. Spring**:Spring框架不仅提供了依赖注入和面向切面编程,还支持Web应用的开发。在s2sh组合中,Spring主要负责管理Bean,包括...

    EXTJS_.7z文件上传

    1. **EXTJS文件上传组件**:EXTJS提供了`Ext.form.FileField`组件,也称为“上传字段”,用于创建一个文件选择输入框。用户可以选择本地文件,然后通过Ajax方式提交到服务器。它通常与`Ext.form.BasicForm`和`Ext....

    批量图片预览上传(extjs,支持html5和flash)

    配合UploadButton或FormPanel,可以方便地实现文件上传功能。在批量图片预览的场景下,可以创建一个多选FileField,允许用户一次性选择多个图片文件。 2. **HTML5 File API**:HTML5的File API为浏览器提供了处理...

    Plupload多文件上传

    总的来说,Plupload与Struts2的结合提供了一个高效、灵活的文件上传解决方案,适用于各种Web应用。通过充分利用这两个工具,开发者可以轻松地实现文件上传功能,同时保证良好的用户体验和强大的后台处理能力。

    Ext 文件上传参考文档

    Ext 文件上传参考文档主要涉及的是在Web开发中处理文件上传的场景,特别是使用ExtJS框架进行前端交互。ExtJS是一个强大的JavaScript库,用于构建复杂的、数据驱动的Web应用程序。文件上传是用户界面中的常见功能,...

    swfupload+ext2

    总的来说,“swfupload+ext2”项目结合了SwfUpload 的前端文件上传功能,Ext2 的富客户端界面,以及Struts2 的后端处理能力,形成了一套完整的文件上传解决方案。开发者可以通过导入这个项目到MyEclipse,快速地搭建...

Global site tag (gtag.js) - Google Analytics