记录遇到的一个bug,H5端调用原生的相机和相册上传头像,但是相册选择后上传没问题(后面发现也是有问题的),相机拍完照后上传却报如下错误:
"Failed to load [http://shopinter.lkkjjt.com/bus/upload/authen] No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '[http://h5.lkkjjt.com](http://h5.lkkjjt.com/)' is therefore not allowed access.", source: [http://h5.lkkjjt.com/bus/my/authen](http://h5.lkkjjt.com/bus/my/authen) (0)
猛的一看,跨域问题?第一反应想找前端同事,但是ios是可以的,用android原生浏览器拍照也可以,那就是自己代码的问题了,可是我的代码已经配置好了
/* 设置可以访问文件 */
mWebView.getSettings().setAllowFileAccess(true);
// 是否允许通过file url加载的Javascript读取本地文件,默认值 false
mWebView.getSettings().setAllowFileAccessFromFileURLs(true);
// 是否允许通过file url加载的Javascript读取全部资源(包括文件,http,https),默认值 false
mWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);
百度一番有的说要这么配置:
try {
Class<?> clazz = webView.getSettings().getClass();
Method method = clazz.getMethod("setAllowUniversalAccessFromFileURLs", boolean.class);
if (method != null) {
method.invoke(webView.getSettings(), true);
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
运行测试还是不行,于是怀疑是不是拍照存储的路径有问题,改了路径测试不行。然后在想为什么选择图片就可以呢?
一波操作!点击选择相册,选择刚拍的照片,确定。
。。。。。。
传不了,还是报跨域的错误!!!
就在此时,不经意瞄了下照片的大小,2M多,额,感觉是照片大小的问题。
又一波操作!拍完的照片,选择的照片统统压缩,运行测试,哎!,可以了!之所以之前测试选择相册可以上传,那是照片大小不大,在200k以下。
好了,终于解决了,不知道为什么照片太大,会报跨域问题!!!