`
guofengcn
  • 浏览: 49784 次
  • 性别: 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('提示', '系统出错,可能您的填写有错,请稍后再尝试上传!');
	       }
	   });
    },

相关推荐

Global site tag (gtag.js) - Google Analytics