本文主要介绍使用webuploader上传文件以及兼容ie八、ie9所遇到的问题及解决方案。webuploader官方简介兼容ie6+。javascript
个人demo目录以下:css
upload // 文件夹
webuploader.js
webuploader.css
webuploader.swf
jQuery-1.9.1.js
upload.html
复制代码
1、 若是上传文件的框是一个弹出框,控制台也没有报错,一开始属性为{display:none},点击后为block,点击"选择文件"按钮,可是点击按钮没有响应(全部浏览器都没响应)html
解决:前端
右击"选择文件"按钮看看input file的width、height、position。可能你会发现他们都没有正常显示。更改样式便可。java
2、 若是webuploader.swf没有与upload.html同级目录,在ie9如下浏览器点击没反应node
例如:个人demo目录以下git
upload // 文件夹
css
webuploader.css
js
webuploader.js
webuploader.swf
jQuery-1.9.1.js
upload.html
复制代码
3、 若是同层级仍是没反应,排查问题及解决:github
4、 webuploader如何提交参数web
官方文档中提出了在初始化中传入参数,以下:npm
WebUploader.create({
// 。。。其余配置。。。
// 。。。其余配置。。。
formData: {
file_uid: '',
file_size: '0'
}
})
复制代码
可是这个参数是固定的,页面加载、组件加载时就以经固定了,全部传入的file_uid= '',file_size= '0', 不能在多文件上传时传入不一样参数。官方文档没有给出详细的动态传参方式。
传参方式:
uploader.on('uploadStart', function (file) {
// 每一个文件开始上传时传入不一样参数
uploader.options.formData.file_size = file.source.size;
uploader.options.formData.file_uid = file.source.uid;
})
复制代码
5、 ie八、ie9采用FLASH上传的跨域问题
这一点官方文档里面没有详细介绍。从webuploader github下载的代码里找到server目录下的crossdomain.xml,这个是跨域处理的文件,把这个文件发给大家的后台,让后台把这个文件放在服务器的前端代码的根目录下面,与html同层级。ie八、ie9falsh上传文件时会先发一个get请求是否容许跨域,而后再发上传文件的请求(前端代码不须要改动).
以下图所示:
http-server -p 8080 -P http://****/api/v1 -c-1
// -p: 本地访问的端口号
// -P: 作转发代理的域名
// -c-1: 禁用缓存
复制代码
这样你就能够在ie八、ie9下成功上传了。
在ie9如下的浏览器上传超过500Mb 的文件计算md5值时就会超时,会报一个'http'的错误。官方也没有提出解决方案。
参考文献:
webuploader: https://fex.baidu.com/webuploader/doc/index.html
webuploader github: https://github.com/fex-team/webuploader/issues
做者信息:宁文飞,人和将来大数据前端工程师