ajaxFileUpload 无刷新文件上传

前端之家收集整理的这篇文章主要介绍了ajaxFileUpload 无刷新文件上传前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、无刷新文件上传代码实现:

引用资源文件

  1. <script type="text/javascript" src="../js/jquery.js"></script>
  2. <script type="text/javascript" src="../js/ajaxfileupload.js"></script>

二、实现代码

  1. <div style="background: #ff9c01; color: #FFF; font-size: 14px; font-family: Microsoft YaHei; padding: 3px 6px; margin-left: 8px;width: 80px;text-align: center;">
  2. <a href="javascript:void(0);" onclick="tempUpLoadFile('pth','naPt','naSh','png,jpg');">上传文件</a>
  3. </div>
  4. <span id="naSh"></span>
  5. <input type="hidden" id="pth"/>
  6. <input type="hidden" id="naPt"/>
  7. <jsp:include page="/WEB-INF/jsp/common/uploadTemp.jsp"/>

三、uploadTemp.jsp 实现代码
  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
  5. %>
  6. <script type="text/javascript">
  7. /* js/ajaxfileupload.js */
  8. /**
  9. * 上传文件控件
  10. * filePath :input 保存上传到服务器文件的路径
  11. * fileName :input 保存文件名称
  12. * fileNameShow :span 要显示上传文件名称
  13. * checkFileType : 要上传文件的类型,逗号分隔
  14. */
  15. var path,name,nameShow,chckFiName;
  16. function tempUpLoadFile(filePath,fileName,fileNameShow,checkFileType) {
  17. path = filePath;
  18. name = fileName;
  19. chckFiName = checkFileType;
  20. if(fileNameShow != undefined){
  21. nameShow = fileNameShow;
  22. }
  23. $("#fileTempId").val();
  24. $("#fileTempId").click();
  25. }
  26.  
  27. /**
  28. * JS 上传回调函数,可重写
  29. */
  30. function callBackJs(filePath,fileName){
  31. $("#"+path).val(filePath);
  32. $("#"+name).val(fileName);
  33. $("#"+nameShow).text(fileName);
  34. }
  35. function checkUploadFileType(){
  36. //上传文件全路径
  37. var filepath = $("#fileTempId").val();
  38. var dotIndex = filepath.lastIndexOf(".");
  39. //文件没有后缀时,进行提示
  40. if (-1 == dotIndex){
  41. alert('格式仅限于' + chckFiName + ',请重新选择。');
  42. return false;
  43. }
  44. var suffix = filepath.substring(dotIndex+1,filepath.length).toLowerCase(); //文件后缀
  45. var chckFiNames = chckFiName.split(",");
  46. var isLegal = false;
  47. for (var i = 0; i < chckFiNames.length; i++){
  48. if (suffix == chckFiNames[i]){
  49. isLegal = true;
  50. break;
  51. }
  52. }
  53. if(!isLegal){
  54. alert('文件格式仅限于' + chckFiName + ',请重新选择。');
  55. return false;
  56. }
  57. return true;
  58. }
  59. function fileSubmit() {
  60. if(checkUploadFileType()){
  61. $.ajaxFileUpload({
  62. url : '<%=basePath%>file/uploadImage.do',//用于文件上传的服务器端请求地址
  63. type:'post',async : true,secureuri : false,//是否启用安全提交一般设置为false
  64. fileElementId : 'fileTempId',//文件上传空间的id属性 <input type="file" id="file" name="file" />
  65. dataType : 'json',//返回值类型 一般设置为xml,script,json,html
  66. success : function(data,status) {
  67. if(data.success == 'success'){
  68. callBackJs(data.msg,data.fileName);
  69. }else{
  70. alert("上传文件出错啦!"+e);
  71. }
  72. },error:function(data,status,e){
  73. alert("网络连接错误!"+e);
  74. }
  75. });
  76. }
  77. }
  78. </script>
  79. <span id="showProcess"></span>
  80. <input style="display: none" type="file" id="fileTempId" name="file" onchange="fileSubmit()"/>


三、后台代码实现:

  1. package com.company.common.baseAction;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. import java.net.Socket;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10.  
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13.  
  14. import org.apache.commons.fileupload.FileItem;
  15. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  16. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  17. import org.apache.commons.io.IoUtils;
  18. import org.springframework.stereotype.Controller;
  19. import org.springframework.web.bind.annotation.RequestMapping;
  20. import org.springframework.web.bind.annotation.RequestMethod;
  21. import org.springframework.web.bind.annotation.ResponseBody;
  22.  
  23. /**
  24. * Title FileUntilAction.java
  25. * Description 文件工具操作类
  26. * Author XXXX
  27. * Date 2016-2-25 下午02:47:23
  28. * Version V1.0
  29. */
  30. @Controller
  31. @RequestMapping("/file")
  32. public class FileUntilAction {
  33.  
  34. @ResponseBody
  35. @RequestMapping(value = "/uploadImage",method = RequestMethod.POST)
  36. public Map<String,Object> loginEnhome(HttpServletRequest request,HttpServletResponse response) {
  37. System.out.println("上传文件开始。。。。。。。");
  38. InputStream is = null;
  39. Socket socket = null;
  40. OutputStream os = null;
  41. InputStream sis = null;
  42. String path = "";
  43. Map<String,Object> content = new HashMap<String,Object>();
  44. try {
  45. String serverIp = "127.0.0.1";
  46. int port = 8457 ;
  47. if (serverIp.equals("")) {
  48. content.put("success",false);
  49. content.put("msg","没有配置图片服务器IP!");
  50. return content;
  51. }
  52. DiskFileItemFactory dff = new DiskFileItemFactory();
  53. ServletFileUpload fileUpload = new ServletFileUpload(dff);
  54. List<FileItem> fileItems = fileUpload.parseRequest(request);
  55.  
  56. if (fileItems.size()==0) {
  57. System.out.println("没有文件上传!");
  58. content.put("success","没有文件上传!");
  59. return content;
  60. }
  61. // 获取图片参数
  62. is = fileItems.get(0).getInputStream();
  63. long size = is.available();
  64. String fileName = fileItems.get(0).getName();
  65. String fileType= fileName.substring(fileName.indexOf(".")+1,fileName.length());
  66. String uploadName = fileName.substring(fileName.lastIndexOf("\\")+1,fileName.length());
  67. // 请求参数
  68. StringBuffer params = new StringBuffer();
  69. params.append("cmd:upload\r\n");
  70. params.append("name:" + 88 + "_" + 88 + "\r\n");
  71. params.append("type:" + fileType +"\r\n");
  72. params.append("size:" + size + "\r\n");
  73. params.append("\r\r\n");
  74.  
  75. // 发起SOCKET请求
  76. socket = new Socket(serverIp,port);
  77. os = socket.getOutputStream();
  78. os.write(params.toString().getBytes("GBK"));
  79. os.flush();
  80.  
  81. sis = socket.getInputStream();
  82. byte[] result = new byte[10240];
  83. sis.read(result,1024);
  84. System.out.println("首次:" + IoUtils.toString(result,"UTF-8"));
  85.  
  86. // 上传文件
  87. byte[] data = new byte[10240];
  88. int read = 0;
  89. while ((read = is.read(data)) != -1) {
  90. os.write(data,read);
  91. }
  92. socket.shutdownOutput();
  93.  
  94. // 解析请求结果
  95. sis.read(result,1024);
  96. String uploadResult = IoUtils.toString(result,"UTF-8");
  97. System.out.println("第二次:" + uploadResult);
  98. String[] uplpads = uploadResult.split("\r\n");
  99. for (String r : uplpads) {
  100. if (r.contains("path")) {
  101. path = r.replace("path:","").replaceAll("\\r","").replaceAll("\\n","").trim();
  102. }
  103. }
  104.  
  105. content.put("success","success");
  106. content.put("msg",path);
  107. content.put("fileName",uploadName);
  108. }
  109. catch (Exception e) {
  110. System.out.println("上传文件失败!!"+e);
  111. content.put("success","fail");
  112. content.put("msg","图片上传失败!");
  113. }
  114. finally {
  115. IoUtils.closeQuietly(os);
  116. IoUtils.closeQuietly(is);
  117. IoUtils.closeQuietly(sis);
  118. try {
  119. socket.close();
  120. }
  121. catch (IOException e) {
  122. System.out.println("Socket关闭失败!"+ e);
  123. }
  124. }
  125. System.out.println("content:"+content);
  126. return content;
  127. }
  128. }

点击上传按钮图标后,直接弹出上传框,选择文件后,后台直接上传,并在前台显示上传文件名称

注意:后台使用的是ServletFileUpload 方法,在使用springMVC 或 struts 时,一定要删除或重写ServletFileUpload 中的上传方法, 否则因为fileUpload.parseRequest(request) 方法获取不到上传文件,因为在源码ServletFileUpload 中已经存在此方法,有重复出现。

解决办法1,删除配置文件

  1. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
方法2,重写此方法

运用ajaxUploadFile上传,有点不好,无法获取上传进度信息,重写方法后,设置文件监听可获取进度,此处待后期更新

猜你在找的Ajax相关文章