Internet Explorer8和9中的Ext Js Filefield问题

时间:2014-04-21 18:51:25

标签: spring-mvc extjs4.2

我的表单中有一个文件字段。 当我通过控制器提交表单时,IE显示安全栏说我正在尝试将文件下载到计算机,这与我正在做的完全相反(我正在上传文件)。 当我使用FF将表单提交到服务器时,一切都很好。但是IE8和Ie 9会出现问题。

控制器操作:

var myForm = Ext.getCmp('uploaddraftpcpPanel').getForm(); // get the basic form
if (myForm.isValid()) { // make sure the form contains valid data before submitting
    myForm.submit({


        headers: {
            enctype: 'multipart/form-data; charset=UTF-8'
        },
        url: 'upload/uploaddraftpcp.action',


        success: function (myForm, action) {
            Ext.Msg.alert('success', "success");
        },
        failure: function (myForm, action) {
            Ext.Msg.alert('Failed', "failed");
        }
    });


} else { // display error alert if the data is invalid
    Ext.Msg.alert('Invalid Data', 'Please correct form errors.');
}

服务器端代码如下所示:

@RequestMapping(value = "/upload/uploaddraftpcp.action", method = RequestMethod.POST)


public @ResponseBody
Map<String, ? extends Object> uploadDraftpcp(HttpServletRequest request){
    Map<String, Object> modelMap = new HashMap<String, Object>(2);

    try {

        System.out.println("title pcp" + request.getParameter("title"));
        System.out.println("description pcp"
                + request.getParameter("description"));
        //    response.setContentType("text/html");

        modelMap.put("message", "Successfully submitted Form");
        modelMap.put("success", true);
        return modelMap;
    } catch (Exception e) {
        System.out.println(e.toString());
        e.printStackTrace();
        return ExtJSReturn
                .mapError("Error retrieving data.");
    }

}

1 个答案:

答案 0 :(得分:0)

In Ext JS,文件上传不是使用普通的'Ajax'技术执行的,也就是说它们不是使用XMLHttpRequests执行的。而是临时创建包含所有字段的隐藏元素,并使用其目标集提交以引用动态生成的隐藏元素,该元素将插入到文档中,但在收集返回数据后将被删除。

浏览器解析服务器响应以创建IFRAME的文档。如果服务器使用JSON发送返回对象,则必须将Content-Type标头设置为text/html,以告知浏览器将文本未更改地插入文档正文中。

Chrome,FF,IE10及以上版本在他们在响应标头中看到Content-Type = application/json时就会发生这种情况。但是,当您对IE8和IE9执行此操作时,当服务器从文件上载中重新响应时,您会看到一条消息,其中包含以下内容:“您要打开还是保存此文档”?

所以,要在IE8和IE9中修复它,只需将Content-Type设置为text / html即可。现代浏览器响应相同,因此您不会使用该解决方案破坏任何内容。