这两天在做一个图片上传器,整了两天,因为浏览器的兼容性问题,主要还是奇葩的IE,不过一番周折后,最后还是成功兼容IE8+(8以下没有测过),firefox,chrome等主流浏览器。
做好了效果是这样子的:
有两层iframe嵌套,图片使用uploadPreview.js做预览,因为原生的input type="file"上传控件样式太丑,
于是把原生的上传控件隐藏<input id="uploadFile" name="file" type="file" style="display:none"/>,
自己写了个按钮点击的时候去focus()一下就可以弹出文件选择了,然后调用ajaxfileupload.js去上传图片,ok,firefox和chrome测试都通过,很顺利,结果没想到IE果然还是不负众望地挂掉了。
第一个问题:
IE首先碰见的是选择图片之后uploadPreview.js不能预览,尝试了各种办法,最后发现ie由于安全机制,
不支持别的按钮去触发<input id="uploadFile" name="file" type="file" />,于是只能去使用原生的了,参照这篇http://www.haorooms.com/post/css_input_uploadmh文章改了一下原生的样式,好看了些,ie可以预览了,紧接着
第二个问题:
框架使用的是SpringMVC,在IE使用ajaxfileupload.js上传,java的action会返回一个json数据,ajaxfileupload的回掉函数会有一些处理,结果在ie下调用,浏览器直接弹出的是下载。
贴上原有的方法:
@RequestMapping("ajaxUpload")
@ResponseBody
public JSONObject ajaxUpload(
@RequestParam("file") MultipartFile file,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
JSONObject jsonObject = new JSONObject();
.....
//filePath,处理\\,js不认\\,变成;
parentDir = parentDir.replaceAll("\\" + File.separator, ";");
jsonObject.put("resultMsg", resultMsg);
jsonObject.put("width", widths);
jsonObject.put("_callback", request.getParameter("_callback"));
jsonObject.put("filePath", parentDir + ";" + destFilename);
jsonObject.put("fileName", originalFilename);
return jsonObject;
}
我的解决方法(为ie专门写了一套):
@RequestMapping("ajaxUploadIE")
@ResponseBody
public void ajaxUploadIE(
@RequestParam("file") MultipartFile file,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
JSONObject jsonObject = new JSONObject();
....
//filePath,处理\\,js不认\\,变成;
parentDir = parentDir.replaceAll("\\" + File.separator, ";");
jsonObject.put("resultMsg", resultMsg);
jsonObject.put("width", widths);
jsonObject.put("_callback", request.getParameter("_callback"));
jsonObject.put("filePath", parentDir + ";" + destFilename);
jsonObject.put("fileName", originalFilename);
response.setContentType("text/html");
response.getWriter().write(jsonObject.toString());
}
第三个问题:
在ie下图片开始没有路径的话,会有一个空的边框,borer=0,border-style:none。。。。等等都试了,都不好使,我的最后的做法是,为ie写了一个样式,开始让图片透明,选择了图片之后再用js把图片透明度调回来,显示就正常了。
img{
filter:alpha(opacity=0);
}
就这些,记录下。
相关推荐
在本文中,我们将深入探讨`ajaxfileupload.js`的完整使用方法,以及它与jQuery的集成。`ajaxfileupload.js`是一个JavaScript库,用于实现异步文件上传功能,避免了传统文件上传时页面刷新的问题。它与jQuery的结合...
AjaxFileUpload.js是一个专为实现异步文件上传功能而设计的JavaScript库,它利用Ajax技术实现了无刷新的文件上传,极大地提升了用户体验。在本文中,我们将深入探讨AjaxFileUpload.js的工作原理、使用方法以及相关的...
ajaxfileupload.js用于文件上传
总结来说,"方便自己下载的ajaxfileupload.js备份"是一个适用于前端开发者的实用资源,它结合了jQuery和Ajax技术,提供了便捷的图片异步上传功能。开发者可以通过引入这两个文件,轻松地在自己的项目中实现图片上传...
ajaxfileupload.js, jquery异步文件上传插件
此为前端进行文件上传,使用Ajax方式提交的js插件,使用方便简洁,开发很高效。
使用Jquery做上传文件处理时,用到了ajaxfileupload.js 这个第三方代码,但是这个js几乎就是半成品,问题很多。现在整理如下并附修复版的ajaxfileupload.js下载。 问题: 1:无法带参数提交,只能上传文件; 2:...
本篇文章将深入探讨`AjaxFileUpload.js`的工作原理、使用方法及其相关知识点。 `AjaxFileUpload.js`通常与服务器端的脚本配合使用,如PHP、ASP.NET或Node.js等,以接收并处理上传的文件。它利用HTML5的File API和...
通过上述方法,我们可以有效解决在IE9和Firefox浏览器下使用`AjaxFileUpload.js`上传大文件时出现的问题。这种方法的核心是调整服务器端响应的`Content-Type`,从而使得浏览器能够正确解析响应数据。同时,该方法也...
ajaxfileupload.js 兼容IE
### JSP 使用 ajaxFileUpload.js 实现跨域问题解析 #### 一、背景与概述 在Web开发中,跨域问题一直是开发者面临的一个常见难题。跨域问题是由于浏览器的同源策略导致的,该策略限制了一个域下的JavaScript脚本...
通过修改终于使得ajaxfileupload兼容jquery3,代码已上线运行。
**AjaxFileUpload.js** 是一个基于 jQuery 的异步文件上传插件,它允许用户在不刷新页面的情况下上传文件,提供了一种便捷、高效的文件交互体验。这个插件广泛应用于网页应用,尤其是那些需要用户交互频繁上传文件的...
**AjaxFileUpload.js** 是一个JavaScript库,专为在网页上实现异步文件上传而设计。这个库利用了Ajax技术,使得用户可以在不刷新整个页面的情况下上传文件,提供了更好的用户体验。AjaxFileUpload.js通常与jQuery库...
今天我们要讨论的是两个非常著名的JavaScript文件:“jquery-1.2.1.js”和“ajaxfileupload.js”。这两个文件在Web开发中有着重要的作用,特别是在处理异步文件上传和页面交互方面。 首先,我们来了解“jquery-...
ajax上传文件必须js文件,修复其中缺少handleError方法,json处理带有<pre></pre>,问题,亲测可以,直接引用即可!