需要jquery.js 和 ajaxfileupload.js ajaxUpload.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ page pageEncoding="UTF-8" %> <%@ page import="java.io.File" %> <%@ page import="java.io.InputStream" %> <%@ page import="java.io.OutputStream" %> <%@ page import="java.io.RandomAccessFile" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <title>Insert title here</title> <mce:script type="text/javascript" src="script/jquery.js" mce_src="script/jquery.js"></mce:script> <mce:script type="text/javascript" src="script/ajaxfileupload.js" mce_src="script/ajaxfileupload.js"></mce:script> <link href="css/ajaxfileupload.css" mce_href="css/ajaxfileupload.css" rel="stylesheet" type="text/css"> <mce:script type="text/javascript"><!-- function form1Submit(){ alert(1); return false; } function showProcessBar1(src){ var str_div = '<table border="0" width="100%" height="100%" cellspacing="1" cellpadding="0" class="ReportTable">'; str_div += '<tr class="TableContent">'; str_div += '<td align="center">'; str_div += '<img src="+src+" mce_src="+src+" border="0">'; str_div += '</td>'; str_div += '</tr>'; str_div += '</table>'; $("#div1").html(str_div); //$("#div1").show(); } function hideProcessBar1(){ $("#div1").html(" "); //$("#div1").show(); } function ajaxUploadFile(){ //alert("警告:/n执行数据恢复,将会中止主机安全管理系统."); var filePath = $("#filePath").val(); var fileId = $("#filePath").attr("id"); var url = "ajaxUploadService.jsp"; if("" == $.trim(filePath)){ alert("请选择上传文件."); return false; } showProcessBar1("images/process_bar1.gif"); $.ajaxFileUpload({ type:"POST", secureuri:false, //**文件上传空间的id属性,这边需要写入对应的上传文件的fileId fileElementId:fileId, dataType:"text", url: url, //data:{name:'linwei',age:'20'}, success:function(data){ hideProcessBar1(); alert("上传完成."); }, error:function(xhr,status,err) { hideProcessBar1(); alert("上传失败."); } }); } $(document).ready(function(){ // alert("使用恢复将会造成4A系统中止运行。"); // $("#div1").hide(); $("#msg1").click(function(){ showProcessBar1("images/process_bar1.gif"); }); }); // --></mce:script> </head> <body> <center> <table> <tr> <td> <input type="file" name="filePath" id="filePath" value="__NULL__"/> </td> <td id="div1" name="div1" height="30px" width="170px"> <!-- <div id="div1" name="div1" style="width:150px; height:20px;"> </div>--> </td> </tr> <tr> <td align="center"> <input type="hidden" name="fileName" id="fileName" value="__NULL__"/> <input type="hidden" name="userName" id="userName" value="Hello.Kit"/> <button type="button" id="submit1" name="submit1" οnclick="ajaxUploadFile()">提交</button> </td> <td> </td> </tr> <tr> <td> <button type="button" id="msg1" name="msg1">提示</button> </td> <td> </td> </tr> </table> </center> </body> </html> ajaxUploadService.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ page pageEncoding="UTF-8" %> <%@ page import="java.io.File" %> <%@ page import="java.io.InputStream" %> <%@ page import="java.io.OutputStream" %> <%@ page import="java.io.RandomAccessFile" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <title>上传文件服务</title> </head> <body> <% InputStream servletIn = null; //OutputStream servletOut = null; RandomAccessFile fileOut = null; int readLen = 0; byte[] buffer = new byte[1024]; String fileName = null; String uploadDir = "d://test//dbBackup//upload//"; File file = null;//new File(uploadDir + "edass_dbBackup.zip"); int startIndex = 0; int endIndex = 0; int readCount = 1; try{ System.out.println("1111111"); file = new File(uploadDir + "test.tmp"); fileOut = new RandomAccessFile(file, "rw"); if(file.exists()){ fileOut.setLength(0); } servletIn = request.getInputStream(); //servletOut = response.getOutputStream(); for(;-1 != (readLen = servletIn.read(buffer));readCount++){ //System.out.println(new String(buffer, 0, readLen, "gbk")); fileOut.write(buffer, 0, readLen); //readCount += readLen; } //response.setContentType("text/plain;charset=utf-8"); //servletOut.write("写文件完成".getBytes("utf-8")); //servletOut.flush(); }catch(Exception ex){ ex.printStackTrace(); }finally{ try{ //if(null != servletOut) servletOut.close(); }catch(Exception ex){ } try{ if(servletIn != null) servletIn.close(); }catch(Exception ex){ } try{ if(fileOut != null) fileOut.close(); }catch(Exception ex){ } } %> </body> </html> HtmlFileInfo.java,此类用于解释上传的数据: class HtmlFileInfo{ // -----------------------------41184676334 // Content-Disposition: form-data; name="filePath"; filename="a.cmd" // Content-Type: application/octet-stream // // [Desktop Entry]dsdsdsdsdsd // -----------------------------41184676334-- //开始标志 private String topFlag = null; //字段的名称 private String name = null; //文件名,这个文件名可能带路径 private String fileName = null; //数据类型 private String type = null; //数据块开始读取的位置 private long startPosition = 0; //数据块大小 private long blockSize = 0; //结束标志 private String bottomFlag = null; private void setTopFlag(String topFlag){ this.topFlag = topFlag; } private void setBottomFlag(String bottomFlag){ this.bottomFlag = bottomFlag; } private void parseDisposition(String line){ // Content-Disposition: form-data; name="filePath"; filename="a.cmd" name = line.substring(line.indexOf("name=/"")+6, line.indexOf("/";")); fileName = line.substring(line.indexOf("filename=/"")+10, line.length()-1); // System.out.println("name="+name); // System.out.println("fileName="+fileName); } private void parseType(String line){ //Content-Type: application/octet-stream type = line.substring(line.indexOf("Content-Type: ")+14); // System.out.println("type="+type); } private void setStartPosition(long startPosition){ this.startPosition = startPosition; } private void setBlockSize(long blockSize){ this.blockSize = blockSize; } public long getDataBlockStartPosition(){ return startPosition; } public long getDataBlockSize(){ return blockSize; } public String getName(){ return name; } public String getFileName(){ return fileName; } /** * 数据类型<br> * zip:application/x-zip-compressed * 其它:application/octet-stream * @return */ public String getType(){ return type; } static public HtmlFileInfo parseFile(File file){ HtmlFileInfo info = new HtmlFileInfo(); RandomAccessFile fileIn = null; FileChannel channel = null; String line = null; // byte[] buffer = new byte[1024]; // int readLen = 0; long startPosition = 0; long endPosition = 0; try{ fileIn = new RandomAccessFile(file, "r"); channel = fileIn.getChannel(); //-----------------------------41184676334 line = fileIn.readLine(); info.setTopFlag(line); info.setBottomFlag(line+"--"); //Content-Disposition: form-data; name="filePath"; filename="a.cmd" line = fileIn.readLine(); info.parseDisposition(line); //Content-Type: application/octet-stream line = fileIn.readLine(); info.parseType(line); //空行 line = fileIn.readLine(); //数据块开始读取的位置 startPosition = channel.position(); info.setStartPosition(startPosition); //最后的位置 endPosition = fileIn.length()-info.bottomFlag.getBytes().length; endPosition -= 4;//减去2个回车换行 info.setBlockSize(endPosition-startPosition); }catch(Exception ex){ throw new RuntimeException(ex); }finally{ try{ if(null != channel) channel.close(); }catch(Exception ex){ } try{ if(null != fileIn) fileIn.close(); }catch(Exception ex){ } } return info; } }