众所周知ajax是使用了浏览器内部的XmlHttpRequest对象来传输XML数据的。既然是Xml的数据传输,那么传输的数据肯定是文本的,而文件上传则需要传输二进制的数据,显然用ajax是不可能的。

这里要说的是用ajax上传文件其实只是类似ajax的那种操作,实际上并没有用到xmlhttprequest对象。从网上找到模拟form提交的方式实现此功能,如下所示:

    var form = $("<form>");   //定义一个form表单form.attr('style','display:none');   //在form表单中添加查询参数form.attr('target','');form.attr('method','post');form.attr('action',_url);$('body').append(form);  //将表单放置在web中form.submit();   //表单提交

然而这种方式在火狐和IE8中都能正常运行,只有在IE6下总是报如下错误:

ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
at org.apache.catalina.connector.OutputBuffer.realWri teBytes(OutputBuffer.java:366)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(B yteChunk.java:403)
at org.apache.catalina.connector.OutputBuffer.doFlush (OutputBuffer.java:311)
at org.apache.catalina.connector.OutputBuffer.flush(O utputBuffer.java:293)
at org.apache.catalina.connector.Response.flushBuffer (Response.java:534)
at org.apache.catalina.core.StandardHostValve.status( StandardHostValve.java:285)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:136)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:825)
at org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.processConnection(Http11Protocol.jav a:743)
at org.apache.tomcat.util.net.PoolTcpEndpoint.process Socket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThr ead.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlR unnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)

上网找引起这个错误的原因归纳如下:

①:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;
②:客户关掉了浏览器,而服务器还在给客户端发送数据;
③:浏览器端按了Stop

而很显然我的原因并不符合这三种,应该是与特定的浏览器解析有关,又有解决方法说用IE下载文档时要设置Cache-Control

response.addHeader("Cache-Control", "no-transform, max-age=0");

但是对于我这种情况也没用,然后我试着在IE6的浏览器里直接输入下载地址能正常下载,说明问题出在form提交这种方式上,于是我改成用iframe直接链接的方式,代码如下:

var iframe=$("<iframe style='display:none'>");
$('body').append(iframe);
iframe.attr('src',_url);

OK,解决了,至于为什么用form提交方式不行,网上有人说原因如下:

Stupid ie6.We found the problem and it is not related with java side of code.The problem is because of this html statement in jsp:This statement somehow creates 2 different request with 1 click on ie6, so this makes confusion on java side.

ajax下载文档 ClientAbortException: java.net.SocketException: Connection reset by pee相关推荐

  1. Tomcat抛出异常:ClientAbortException: java.net.SocketException: Connection

    Tomcat抛出异常:ClientAbortException: java.net.SocketException: Connection 参考文章: (1)Tomcat抛出异常:ClientAbor ...

  2. 最近纠结致死的一个java报错java.net.SocketException: Connection reset 终于得到解决

    自从SEOTcs系统11月份24日更新了一下SEO得分算法以来,一直困扰我的一个问题出现了,java的数据job任务,在执行过程中会经常报以下的错误: "2011-12-03 18:00:3 ...

  3. IO异常 java.net.SocketException: Connection reset

    IO异常 java.net.SocketException: Connection reset 参考文章: (1)IO异常 java.net.SocketException: Connection r ...

  4. Socket java.net.SocketException: Connection reset的解决方案

    Socket java.net.SocketException: Connection reset的解决方案 参考文章: (1)Socket java.net.SocketException: Con ...

  5. CentOS6中连接ftp服务器下载文件时出现了java.net.SocketException: Connection reset

    问题描述:连接CentOS6中的ftp服务器下载文件时出现了java.net.SocketException: Connection reset 解决办法: 1.查看防火墙状态,发现防火墙已开启 se ...

  6. 异常查错java.net.SocketException: Connection reset

    异常查错java.net.SocketException: Connection reset 参考文章: (1)异常查错java.net.SocketException: Connection res ...

  7. JMETER java.net.SocketException: Connection reset 报错解决方案

    JMETER java.net.SocketException: Connection reset 报错解决方案 参考文章: (1)JMETER java.net.SocketException: C ...

  8. java.net.SocketException: Connection reset by peer: socket write error

    最近在做自己的毕业设计,名字是"基于Android的校园二手商品交易系统",于是想把电脑作为服务器,以Android手机作为客户端,做一个C/S结构的程序. 可是一开始就遇到了一个 ...

  9. java网络编程的java.net.SocketException Connection reset异常

    一开始学Stream时没注意过write的flush()方法,今天在学网络编程时,注意到了 服务器端: import java.net.*; import java.io.*; public clas ...

最新文章

  1. kali linux解决:ping: www.baidu.com: 未知的名称或服务(亲测有效)(走了两个弯路,浪费了好多时间)
  2. 二者取其一(初遇)_网络流
  3. Android设计模式(九)--外观模式
  4. 派生类构造的时候一定要调用_为什么骑车的时候一定要带手套?
  5. 带有JUnit 5支持的Ant 1.10.3发布
  6. Python 文件读和写
  7. java enumerator_NSEnumerator使用
  8. Java应用结构规范
  9. Ubuntu设置终端相对短路径
  10. 推荐一个好用的epub转pdf工具
  11. linux下执行efi文件,在Linux下创建EFI BIOS Grub加载分区
  12. Cadence学习篇(12) Cadence中使用Pspice进行电路仿真
  13. 2022最新 Emlog新版导航源码 带用户中心
  14. 带你了解“不拘一格去创新,别出心裁入场景”的锐捷
  15. cs231n-assignment3的笔记
  16. 开关量模块在报警系统中的应用
  17. UCOSII操作系统(四)--任务管理
  18. 深耕5G云专网,阿里云祝顺民入选“2022年度5G创新人物”
  19. 优雅编程之这样重构函数(续),你就“正常”了(二十)
  20. 什么是毛利润、净利润、纯利润?终于有人说清楚了!

热门文章

  1. python打印机打印图片_Python综合应用:教你用字符打印一张怀旧风格的照片
  2. 华为5ipro详细参数使用功能_华为nova5i pro参数配置介绍 华为nova5i pro使用评测
  3. SpringCloud之Zuul网关服务
  4. phpstudy php调试,phpStudy vscode 搭建debug调试的教程详解
  5. java图片上传下载_Java中文件上传下载 --使用Minio
  6. excel word 网页自动求和
  7. 一个小码农的四年工作回忆录,阿里内部核心Java进阶手册
  8. 使用迅雷代替SDK Manager快速下载Android SDK相关
  9. AIX CPU配置之EC/VP
  10. 亚马逊ec2 ssh远程登陆