博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Extjs文件上传问题总结
阅读量:7141 次
发布时间:2019-06-29

本文共 3459 字,大约阅读时间需要 11 分钟。

  本来文件上传是一个简单而常用的功能,但是,由于刚刚接触extjs,对extjs中的控件及其使用方法并不熟悉,导致本来一个很快就可以搞定的文件上传问题,弄了将近两天的时间。现将问题及解决办法发出来,供有相同烦恼的博园参考。只是我第一次发文,如有不妥,望各位海涵。

  问题描述:在文件上传的时候,在ie浏览器下,文件上传成功以后返回response时,回调函数直接报错:无法调用null或者空值的success属性。

  首先看下extjs的代码:

  这就是一个简单的文件上传的Extjs代码,由于测试,写的有些凌乱。当点击上传后,调用后台的文件上传代码:

public void UploadFile(HttpContext context)        {            try            {                HttpFileCollection fileList = context.Request.Files;                if (fileList.Count > 0)                {                    String fileName = fileList[0].FileName;                    //在ie浏览器下需要截取文件名称,因为获取的是上传文件的全路径,其他浏览器不需要截取                    fileName = fileName.Substring(fileName.LastIndexOf("\\", StringComparison.Ordinal) + 1);                    String uploadFilePath = context.Server.MapPath("/upload");                    String fileSavePath = uploadFilePath + "\\" + fileName;                    if (File.Exists(fileSavePath))                    {                        File.Delete(fileSavePath);                    }                    fileList[0].SaveAs(fileSavePath);                    context.Response.Write("{success:true,Msg:\"文件上传成功\"}");                }                else                {                    context.Response.Write("{success:false,Msg:\"请选择一个需要上传的文件\"}");                }            }            catch (Exception)            {            }        }

   按理说这样就可以完成文件上传的操作,但是,我的程序在ie上运行,就是报错。一直提示在ext-all-debug.js中的这里报错:

onSuccess: function(response) {        var form = this.form,            success = true,            result = this.processResponse(response);        if (result !== true && !result.success) { if (result.errors) {                form.markInvalid(result.errors);            }            this.failureType = Ext.form.action.Action.SERVER_INVALID; success = false; } form.afterAction(this, success); },   提示result为null,无法调用空值的success属性。其实原因就是返回的response对象种的responseText的值被ie自动添加了一个
标签所致。   导致在 this.processResponse(response)时,没有办法将一个字符串解析成json格式,所以ext-all-debug.js的源码中就会报错。   要声明的是,这段代码在谷歌、火狐等其他浏览器中没有问题,我相信在一部分的ie中也没有问题,可能碰到高版本ie才会出现这样的奇葩问题。

  其实知道了问题的所在,解决办法就相对简单了。我们只要在后台代码返回json的时候,为response对象设置一个contentType属性就可以了,代码如下:

public void UploadFile(HttpContext context)        {            try            {                HttpFileCollection fileList = context.Request.Files;                if (fileList.Count > 0)                {                    String fileName = fileList[0].FileName;                    //在ie浏览器下需要截取文件名称,因为获取的是上传文件的全路径,其他浏览器不需要截取                    fileName = fileName.Substring(fileName.LastIndexOf("\\", StringComparison.Ordinal) + 1);                    String uploadFilePath = context.Server.MapPath("/upload");                    String fileSavePath = uploadFilePath + "\\" + fileName;                    if (File.Exists(fileSavePath))                    {                        File.Delete(fileSavePath);                    }                    fileList[0].SaveAs(fileSavePath);                    context.Response.ContentType = "text/html";                    context.Response.Write("{success:true,Msg:\"文件上传成功\"}");                }                else                {                    context.Response.Write("{success:false,Msg:\"请选择一个需要上传的文件\"}");                }            }            catch (Exception)            {            }        }

  这样就可以了,ie下就可以原样输出response对象的响应信息。希望对 遇到相同问题的博员有所帮助,晚安各位

 

转载于:https://www.cnblogs.com/eagle69216/p/6002224.html

你可能感兴趣的文章
docker镜像
查看>>
Extjs MVC开发模式详解
查看>>
MongoDB 创建大量集合测试问题
查看>>
java 删除非空文件夹
查看>>
PHP读取配置文件类(php,ini,yaml,xml)
查看>>
JAAS之快速开发JBOSS自定义认证
查看>>
阿里技术高P访谈之郭东白:与“大象”共舞的技术狂人
查看>>
SVN:服务器资源删掉,本地添加时和删掉的名字同名出现One or more files are in a conflicted state....
查看>>
【原创】RabbitMQ 之 Shovel(翻译)
查看>>
javascript设计模式理论和示例深入分析(下)
查看>>
前端的小玩意(6)——使用padding的左定宽、右自适应布局
查看>>
VMWare 网络连接模式(bridged、NAT、host-only)详解
查看>>
Cannot SET AUTOTRACE 处理办法
查看>>
纯AS3项目导入fl包的方法以及fl.controls.DataGrid的详细应用
查看>>
Android 应用增量升级方案之流程篇
查看>>
Install MongoDB Community Edition on Windows
查看>>
菜鸟学Linux命令:tail命令 查看日志
查看>>
对康爷PubSubHubbub教程的一些补充
查看>>
Target-Action回调模式
查看>>
【导入导出】数据泵 job_name参数的使用
查看>>