ajax上传文件到本地

前端之家收集整理的这篇文章主要介绍了ajax上传文件到本地前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. <span style="font-family:Microsoft YaHei;font-size:18px;background-color: rgb(204,204,204);">
  2.  
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8. import java.util.List;
  9.  
  10. import javax.servlet.ServletException;
  11. import javax.servlet.annotation.WebServlet;
  12. import javax.servlet.http.HttpServlet;
  13. import javax.servlet.http.HttpServletRequest;
  14. import javax.servlet.http.HttpServletResponse;
  15.  
  16. import org.apache.commons.fileupload.FileItem;
  17. import org.apache.commons.fileupload.FileUploadException;
  18. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  19. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  20.  
  21. /**
  22. * Servlet implementation class CoreServlet
  23. */
  24. @WebServlet(asyncSupported = true,urlPatterns = { "/CoreServlet" })
  25. public class CoreServlet extends HttpServlet {
  26. private static final long serialVersionUID = 1L;
  27. /**
  28. * @see HttpServlet#HttpServlet()
  29. */
  30. public CoreServlet() {
  31. super();
  32. // TODO Auto-generated constructor stub
  33. }
  34.  
  35. /**
  36. * @see HttpServlet#doGet(HttpServletRequest request,HttpServletResponse response)
  37. */
  38. protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
  39. // TODO Auto-generated method stub
  40. doPost(request,response);
  41. }
  42.  
  43. /**
  44. * @see HttpServlet#doPost(HttpServletRequest request,HttpServletResponse response)
  45. */
  46. protected void doPost(HttpServletRequest request,IOException {
  47. request.setCharacterEncoding("utf-8");
  48. response.setContentType("text/html; charset=utf-8");
  49. //获得磁盘文件条目工厂
  50. DiskFileItemFactory factory = new DiskFileItemFactory();
  51. //获取文件需要上传到的路径
  52. String path = this.getServletContext().getRealPath("/temp");
  53. //如果没以下两行设置的话,上传大的 文件 会占用 很多内存,
  54. //设置暂时存放的 存储室,这个存储室,可以和 最终存储文件 的目录不同
  55. /**
  56. * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上,
  57. * 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem 格式的
  58. * 然后再将其真正写到 对应目录的硬盘上
  59. */
  60. factory.setRepository(new File(path));
  61. //设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室
  62. factory.setSizeThreshold(1024*1024) ;
  63. //高水平的API文件上传处理
  64. ServletFileUpload upload = new ServletFileUpload(factory);
  65. try {
  66. //可以上传多个文件
  67. List<FileItem> list = (List<FileItem>)upload.parseRequest(request);
  68. for(FileItem item : list)
  69. {
  70. //获取表单的属性名字
  71. String name = item.getFieldName();
  72. //如果获取的 表单信息是普通的 文本 信息
  73. if(item.isFormField())
  74. {
  75. //获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的
  76. String value = item.getString() ;
  77. request.setAttribute(name,value);
  78. }
  79. //对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些
  80. else
  81. {
  82. /**
  83. * 以下三步,主要获取 上传文件的名字
  84. */
  85. //获取路径名
  86. String value = item.getName() ;
  87. //索引到最后一个反斜杠
  88. int start = value.lastIndexOf("\\");
  89. //截取 上传文件的 字符串名字,加1是 去掉反斜杠,
  90. String filename = value.substring(start+1);
  91. request.setAttribute(name,filename);
  92. //真正写到磁盘上
  93. //它抛出的异常 用exception 捕捉
  94. //item.write( new File(path,filename) );//第三方提供的
  95. //手动写的
  96. OutputStream out = new FileOutputStream(new File(path,filename));
  97. InputStream in = item.getInputStream() ;
  98. int length = 0 ;
  99. byte [] buf = new byte[1024] ;
  100. System.out.println("获取上传文件的总共的容量:"+item.getSize());
  101.  
  102. // in.read(buf) 每次读到的数据存放在 buf 数组中
  103. while( (length = in.read(buf) ) != -1)
  104. {
  105. //在 buf 数组中 取出数据 写到 (输出流)磁盘上
  106. out.write(buf,length);
  107. }
  108. in.close();
  109. out.close();
  110. response.getWriter().write("{'success':true}");
  111. }
  112. }
  113. } catch (FileUploadException e) {
  114. // TODO Auto-generated catch block
  115. response.getWriter().write("捕捉到异常:" + e.getMessage());
  116. e.printStackTrace();
  117. }
  118. catch (Exception e) {
  119. // TODO Auto-generated catch block
  120. response.getWriter().write("捕捉到异常:" + e.getMessage());
  121. e.printStackTrace();
  122. //e.printStackTrace();
  123. }
  124.  
  125. }
  126.  
  127. }
  128. </span>
  1. <span style="font-family:Microsoft YaHei;font-size:18px;background-color: rgb(204,204);">以上部分为后台代码,需要两个jar包,commons-fileupload,commons-io</span>
  1. <span style="font-family:Microsoft YaHei;font-size:18px;background-color: rgb(204,204);">-----------------------------------------------------------------这个不是分割线-------------------------------------------------------------------</span>
  1. <span style="font-family:Microsoft YaHei;font-size:18px;background-color: rgb(204,204);">以下是前端页面代码</span>
  1. <span style="font-family:Microsoft YaHei;font-size:18px;background-color: rgb(204,204);">
  2. </span>
  1. <pre name="code" class="html"><span style="font-family:Microsoft YaHei;font-size:18px;background-color: rgb(204,204);"><!DOCTYPE html>
  2. <html>
  3. <head>
  4. <Meta charset="UTF-8">
  5. <title>上传文件</title>
  6. <script type="text/javascript">
  7. function uploadFile() {
  8. var xmlhttp;
  9. if (window.XMLHttpRequest) {// code for IE7+,Firefox,Chrome,Opera,Safari
  10. xmlhttp = new XMLHttpRequest();
  11. } else {// code for IE6,IE5
  12. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  13. }
  14. xmlhttp.onreadystatechange=function()
  15. {
  16. if (xmlhttp.readyState==4 && xmlhttp.status==200)
  17. {
  18. document.getElementById('myDiv').innerHTML=xmlhttp.responseText;
  19. }
  20. }
  21. var formdata = new FormData(document.getElementById('form1'));
  22. xmlhttp.open("POST","./CoreServlet",true);
  23. xmlhttp.send(formdata);
  24. }
  25. </script>
  26. </head>
  27. <body>
  28.  
  29. <form id="form1" enctype="multipart/form-data">
  30. 选择要上传文件<input type="file" name="file" /><br>
  31. <button type="button" onclick="uploadFile()">发送</button>
  32. </form>
  33. <br>
  34. <div id="myDiv"><h2></h2></div>
  35. </body>
  36. </html></span>


  1.  
  1. <span style="font-family:Microsoft YaHei;font-size:18px;background-color: rgb(204,204);">
  2. </span>
  1. <span style="font-family:Microsoft YaHei;font-size:18px;background-color: rgb(204,204);">
  2. </span>

猜你在找的Ajax相关文章