解决ajaxfileupload.js在IE9,firefox下文件超大无效

在后台加上即可解决IE9,firefox下面的问题: HttpServletResponse response =ServletActionContext.getResponse(); response.setContentType("text/html"); ### 解决AjaxFileUpload.js在IE9与Firefox下文件过大导致无效问题 #### 背景介绍 在处理Web前端的文件上传功能时,我们经常会遇到浏览器兼容性问题,尤其是在处理较旧版本浏览器如IE9及Firefox时。本文将详细介绍如何解决在IE9和Firefox下使用`AjaxFileUpload.js`进行文件上传时遇到的大文件上传失效的问题。 #### 问题描述 当尝试通过`AjaxFileUpload.js`上传较大文件至服务器时,在IE9和Firefox浏览器中可能会出现上传失败的情况。此问题的原因通常在于浏览器对请求类型的默认设置或限制,特别是在处理二进制数据流时。 #### 解决方案 为了解决这一问题,我们需要对服务器端的响应类型做一些调整。具体来说,可以通过设置HTTP响应的`Content-Type`为"text/html"来规避这个问题。以下是一段示例代码: ```java public String execute() { try { HttpServletResponse response = ServletActionContext.getResponse(); // 关键步骤:设置响应类型为"text/html" response.setContentType("text/html"); // 输出文件信息 System.out.println("file: " + file); InputStream is = null; try { // 创建文件输入流 is = new FileInputStream(file); } catch (Exception e) { // 如果文件不存在,则返回错误提示 response.getWriter().print("fileIsMax"); return null; } // 获取上传目录路径 String root = AllUtil.getPropertyValue(StaticValue.UPLOAD_PATH) + AllUtil.getDateStream("yyyyMMdd") + "/"; // 创建上传目录 File rootFile = new File(root); rootFile.mkdir(); // 文件名处理 String sysFileName = this.fileFileName; sysFileName = sysFileName.substring(sysFileName.lastIndexOf(".") + 1); System.out.println("name: " + this.fileFileName); System.out.println("type: " + this.fileContentType); String sysTime = AllUtil.getDateStream("yyyyMMddHHmmss"); this.pathFileName = sysTime + "." + sysFileName; File destFile = new File(root, sysTime + "." + sysFileName); OutputStream os = new FileOutputStream(destFile); byte[] b = new byte[1024 * 1024 * 10]; // 定义每次读取的字节数量 int length = 0; while (true) { // 从输入流中读取数据 length = is.read(b); if (length < 0) break; // 如果读取结束,则退出循环 os.write(b, 0, length); // 将读取的数据写入输出流 } is.close(); os.close(); // 向客户端发送成功消息 try { response.getWriter().print("normal"); } catch (Exception e) { e.printStackTrace(); } } catch (Exception e) { String message = "文件上传失败"; e.printStackTrace(); } return null; } ``` #### 代码解析 1. **响应类型设置**: - 使用`ServletActionContext.getResponse()`获取当前的HTTP响应对象。 - 设置响应的`Content-Type`为"text/html",这样可以确保浏览器能够正确处理后续的响应数据。 2. **文件处理**: - 通过`new FileInputStream(file)`创建一个文件输入流。 - 如果文件不存在,则向客户端返回错误信息“fileIsMax”并停止执行。 - 接着定义了上传文件的存储路径和文件名,并创建目标文件。 3. **文件读写**: - 定义了一个大小为10MB的字节数组用于存储文件内容。 - 使用`is.read(b)`读取文件内容到字节数组中。 - 通过循环将读取的数据写入到目标文件的输出流中。 - 完成后关闭输入流和输出流。 4. **返回结果**: - 向客户端发送字符串"normal"表示上传成功。 - 如果在执行过程中出现异常,则打印异常信息。 #### 总结 通过上述方法,我们可以有效解决在IE9和Firefox浏览器下使用`AjaxFileUpload.js`上传大文件时出现的问题。这种方法的核心是调整服务器端响应的`Content-Type`,从而使得浏览器能够正确解析响应数据。同时,该方法也适用于其他类型的文件上传场景,有助于提高文件上传功能的稳定性和兼容性。
















try {
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html");
System.out.println("file:" + file);
InputStream is = null;
try{
is = new FileInputStream(file);
}catch (Exception e) {
response.getWriter().print("fileIsMax");
return null;
}
// String root = ServletActionContext.getRequest().getRealPath(
// "/upload");
String root = AllUtil.getPropertyValue(StaticValue.UPLOAD_PATH) + AllUtil.getDateStream("yyyyMMdd") + "/";
//创建日期文件夹
File rootFile = new File(root);
rootFile.mkdir();
String sysFileName = this.fileFileName;
sysFileName = sysFileName.substring(sysFileName.lastIndexOf(".")+1);
System.out.println("name:" + this.fileFileName);
System.out.println("type:" + this.fileContentType);
String sysTime = AllUtil.getDateStream("yyyyMMddHHmmss");

- 「已注销」2015-06-17学习了!感谢,我用的是cos,还需要修改一下!
- jeasonyao2016-09-28可以解决一部分问题。
- hhwzoo2013-03-05很实用的JS文件

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 汽车嵌入式入门宝典,涉及汽车嵌入式软件开发领域各方面
- RFID在物联网中应用附其封装技术.doc
- 互联网产品运营方案.docx
- 房屋中介数据库实践研究报告.doc
- XX城市信息化决策咨询服务系统项目管理两周滚动工作计划.doc
- 图书管理系统软件工程课程设计.doc
- 基于行动导向的《计算机应用基础》教材编写与教学实施.docx
- 基于IntelliJ IDEA的smalidea插件.zip
- 计算机网络通信的安全防护对策研究.docx
- 基于网络学习空间的计算机信息管理专业教学SWOT分析以徽商职业学院为例.docx
- h3c认证云计算工程师题库.docx
- C# 、SQl、Vue等笔记记录
- MATLAB语言程序设计方案基础.docx
- 计算机网络安全.ppt
- 浅析电子商务时代的项目管理.doc
- ARM应用实例之路灯监控通信终端的方案设计书.doc


