实现头像,文件上传

电玩女神 2022-05-22 13:09 578阅读 0赞

该文章来源于 https://www.cnblogs.com/libo0125ok/p/7773898.html

一、Tomcat服务器部分

1、Tomcat服务器

单独复制一份Tomcat,用来作为文件服务器

1.1 web.xml文件:

需要在该Tomcat的conf目录下的web.xml文件的大概100行添加如下几行(红框内部分):

1048036-20171102181110123-1915406525.jpg

1.2 server.xml文件:

需要在该Tomcat的conf目录下的server.xml文件做一些端口的修改

1048036-20171102181701482-1233748541.jpg

1048036-20171102181715107-1169448062.jpg

1048036-20171102181740795-1312674438.jpg

1.3 Tomcat下建立文件夹

在该Tomcat的/webapps/ROOT目录下创建一个upload目录,用来存放上传的文件

1048036-20171102182240795-2108932850.jpg

1.4 启动Tomcat服务器

以上三步做完后,就可以启动Tomcat服务器了,在Tomcat的bin目录下执行 startup.sh 脚本

1048036-20171102182801638-45923572.jpg

二、java部分

1048036-20171102184211638-161647437.jpg

2.1 jar包

除了其他的jar包以外,还需要以下几个jar包

commons-io-1.3.2.jar

commons-fileupload-1.2.1.jar

jersey-client-1.18.1.jar

jersey-core-1.18.1.jar

jersey-common

1048036-20171102183622263-1512326443.jpg

1048036-20171102183635201-933824105.jpg

2.2 配置文件

2.2.1 spring-mvc.xml文件添加如下部分:

  1. <!-- 上传文件 -->
  2. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  3.   <!--最大上传尺寸 5M -->
  4. <property name="maxUploadSize" value="5242880"/>
  5. </bean>

2.2.2 config.properties 文件添加如下部分:

  1. #文件服务器地址
  2. uploadHost=http://172.16.5.102:8090/
  3. #上传的文件保存的目录
  4. imgPath = upload/

2.3 java文件

2.3.1 Upload.java

复制代码

  1. package com.lin.utils;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Date;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import org.apache.commons.io.FilenameUtils;
  9. import org.springframework.web.multipart.MultipartFile;
  10. import com.sun.jersey.api.client.Client;
  11. import com.sun.jersey.api.client.WebResource;
  12. /**
  13. * 上传文件工具类
  14. * @author libo
  15. */
  16. public class Upload {
  17. /**
  18. * 上传文件
  19. * @param request
  20. * @param response
  21. * @param serverPath 服务器地址:(http://172.16.5.102:8090/)
  22. * @param path 文件路径(不包含服务器地址:upload/)
  23. * @return
  24. */
  25. public static String upload(Client client, MultipartFile file, HttpServletRequest request,HttpServletResponse response, String serverPath, String path){
  26. // 文件名称生成策略(UUID uuid = UUID.randomUUID())
  27. Date d = new Date();
  28. SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
  29. String formatDate = format.format(d);
  30. String str = "";
  31. for(int i=0 ;i <5; i++){
  32. int n = (int)(Math.random()*90)+10;
  33. str += n;
  34. }
  35. // 获取文件的扩展名
  36. String extension = FilenameUtils.getExtension(file.getOriginalFilename());
  37. // 文件名
  38. String fileName = formatDate + str + "." + extension;
  39. //相对路径
  40. String relaPath = path + fileName;
  41. String a = serverPath + path.substring(0, path.lastIndexOf("/"));
  42. File file2 = new File(a);
  43. if(!file2.exists()){
  44. boolean mkdirs = file2.mkdirs();
  45. System.out.println(mkdirs);
  46. }
  47. // 另一台tomcat的URL(真实路径)
  48. String realPath = serverPath + relaPath;
  49. // 设置请求路径
  50. WebResource resource = client.resource(realPath);
  51. // 发送开始post get put(基于put提交)
  52. try {
  53. resource.put(String.class, file.getBytes());
  54. return fileName+";"+relaPath+";"+realPath;
  55. } catch (IOException e) {
  56. e.printStackTrace();
  57. return "";
  58. }
  59. }
  60. /**
  61. * 删除文件
  62. * @param filePath(文件完整地址:http://172.16.5.102:8090/upload/1234.jpg)
  63. * @return
  64. */
  65. public static String delete(String filePath){
  66. try {
  67. Client client = new Client();
  68. WebResource resource = client.resource(filePath);
  69. resource.delete();
  70. return "y";
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. return "n";
  74. }
  75. }
  76. }

复制代码

2.3.2 controller层

复制代码

  1. package com.lin.controller;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.ArrayList;
  6. import java.util.Date;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10. import javax.annotation.Resource;
  11. import javax.servlet.ServletContext;
  12. import javax.servlet.http.HttpServletRequest;
  13. import javax.servlet.http.HttpServletResponse;
  14. import org.springframework.beans.factory.annotation.Value;
  15. import org.springframework.stereotype.Controller;
  16. import org.springframework.web.bind.annotation.RequestMapping;
  17. import org.springframework.web.bind.annotation.RequestMethod;
  18. import org.springframework.web.bind.annotation.RequestParam;
  19. import org.springframework.web.bind.annotation.ResponseBody;
  20. import org.springframework.web.multipart.MultipartFile;
  21. import org.springframework.web.multipart.MultipartHttpServletRequest;
  22. import org.springframework.web.multipart.MultipartResolver;
  23. import org.springframework.web.multipart.commons.CommonsMultipartResolver;
  24. import org.springframework.web.servlet.config.VelocityConfigurerBeanDefinitionParser;
  25. import com.lin.domain.data.ResData;
  26. import com.lin.domain.data.ResListData;
  27. import com.lin.domain.error.Error;
  28. import com.lin.domain.sysUser.SysUser;
  29. import com.lin.domain.sysUser.SysUserWithDep;
  30. import com.lin.service.SysUserService;
  31. import com.lin.utils.Aes;
  32. import com.lin.utils.DateTimeUtils;
  33. import com.lin.utils.ResponseUtils;
  34. import com.lin.utils.Upload;
  35. import com.lin.utils.Utils;
  36. import com.sun.jersey.api.client.Client;
  37. import net.sf.json.JSONObject;
  38. /**
  39. * 后台用户-controller
  40. * @author libo
  41. */
  42. @Controller
  43. @RequestMapping("/sysUser")
  44. public class SysUserController {
  45. @Resource
  46. private SysUserService sysUserService;
  47. @Value(value="${imgPath}") //后台图片保存地址
  48. private String imgPath;
  49. @Value(value="${uploadHost}")
  50. private String uploadHost; //项目host路径
  51. /**
  52. * 后台用户登陆功能
  53. * @return
  54. * @throws IOException
  55. */
  56. @ResponseBody
  57. @RequestMapping(value="/login.do", method=RequestMethod.POST)
  58. public void login(HttpServletRequest req, HttpServletResponse res,
  59. @RequestParam(required=true) String loginEmail,
  60. @RequestParam(required=true) String loginPwd) throws IOException{
  61. //代码省略
  62. }
  63. /**
  64. * 根据id查询用户信息(包括部门信息)
  65. * @param req
  66. * @param res
  67. * @param id
  68. * @throws IOException
  69. */
  70. @ResponseBody
  71. @RequestMapping(value="/getSysUser.do", method=RequestMethod.GET)
  72. public void getSysUser(HttpServletRequest req, HttpServletResponse res,
  73. @RequestParam(required=true) Integer id) throws IOException{
  74.   //代码省略
  75. }
  76. /**
  77. * 更新后台用户信息
  78. * @param req
  79. * @param res
  80. * @throws IOException
  81. */
  82. @ResponseBody
  83. @RequestMapping(value="/updateSysUser.do" ,method=RequestMethod.POST)
  84. public void updateSysUser(HttpServletRequest req, HttpServletResponse res) throws IOException{
  85. //代码省略
  86. }
  87. /**
  88. * 添加用户
  89. * @param req
  90. * @param res
  91. * @throws IOException
  92. */
  93. @ResponseBody
  94. @RequestMapping(value="/addSysUser.do", method=RequestMethod.POST)
  95. public void addSysUser(HttpServletRequest req, HttpServletResponse res) throws IOException {
  96. //代码省略
  97. }
  98. /**
  99. * 上传用户头像
  100. * @param request
  101. * @param response
  102. */
  103. @ResponseBody
  104. @RequestMapping(value="uploadSysHeadImg.do", method=RequestMethod.POST)
  105. public void uploadSysHeadImg(HttpServletRequest request,HttpServletResponse response){
  106. JSONObject jo = new JSONObject();
  107. try {
  108. MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
  109. MultipartHttpServletRequest Murequest = resolver.resolveMultipart(request);
  110. Map<String, MultipartFile> files = Murequest.getFileMap();//得到文件map对象
  111.        // 实例化一个jersey
  112. Client client = new Client();
  113. List<String> fileNameList = new ArrayList<>();
  114. List<String> relaPathList = new ArrayList<>();
  115. List<String> realPathList = new ArrayList<>();
  116. for(MultipartFile pic: files.values()){
  117. String uploadInfo = Upload.upload(client, pic, request, response, uploadHost, imgPath);
  118. if(!"".equals(uploadInfo)){ //上传成功
  119. String[] infoList = uploadInfo.split(";");
  120. fileNameList.add(infoList[0]); //文件名
  121. relaPathList.add(infoList[1]); //相对路径
  122. realPathList.add(infoList[2]); //真实完整路径
  123. }else{ //上传失败
  124. fileNameList.add("");
  125. relaPathList.add("");
  126. realPathList.add("");
  127. }
  128. }
  129. jo.put("success", 1);
  130. jo.put("error", null);
  131. jo.put("fileNameList", fileNameList);
  132. jo.put("relaPathList", relaPathList);
  133. jo.put("realPathList", realPathList);
  134. }catch (Exception e) {
  135. jo.put("success", 0);
  136. jo.put("error", "上传失败");
  137. }
  138. ResponseUtils.renderJson(response, jo.toString());
  139. }
  140. }

复制代码

其他的java文件省略,然后运行java项目

三、前端部分

3.1 index1-cropper图片剪切上传

复制代码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>index1-cropper图片剪切上传</title>
  5. <meta charset="utf-8"/>
  6. <meta name="viewport"
  7. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  8. <link rel="stylesheet" href="lib/cropper/dist/cropper.min.css" />
  9. </head>
  10. <body>
  11. <!-- accept="image/*,camera":表示允许调用相册和摄像头,capture="camera":表示直接打开摄像头-->
  12. <!--<input id="btn1" type="file" accept="image/*,camera" capture="camera" style="opacity: 0;"/>-->
  13. <input id="btn1" type="file" accept="image/*,camera" style="opacity: 0;"/>
  14. <div>
  15. <div>上传之前的图片</div>
  16. <img id="face_image" style="width:50px;height:50px;border-radius: 25px;border: 1px solid #fff;"/>
  17. <div>上传之后服务器的图片</div>
  18. <img id="success_image" style="width:50px;height:50px;border-radius: 25px;border: 1px solid #fff;"/>
  19. </div>
  20. <div>
  21. <button id="upload_btn">上传头像</button>
  22. <button id="image_save">保存</button>
  23. <span></span>
  24. </div>
  25. <div class="upload-img" style="width:300px;height: 300px;">
  26. <img src=""/>
  27. </div>
  28. <script src="jquery.min.js"></script>
  29. <script src="lib/cropper/dist/cropper.min.js"></script>
  30. <script src="lib/canvas-toBlob/canvas-toBlob.js"></script>
  31. <script>
  32. $(function() {
  33. //触发input file
  34. $('#upload_btn').click(function() {
  35. console.log('模拟点击。。。');
  36. $('#btn1').trigger('click');
  37. });
  38. //图片上传
  39. var $image = $('.upload-img > img');
  40. $image.cropper({
  41. viewMode: 1,
  42. // preview: '.img-preview', //不同尺寸预览区
  43. aspectRatio: 1, //裁剪比例,NaN-自由选择区域
  44. autoCropArea: 0.7, //初始裁剪区域占图片比例
  45. crop: function(data) { //裁剪操作回调
  46. console.log(data);
  47. }
  48. });
  49. var fileName; //选择上传的文件名
  50. $('#btn1').change(function(){
  51. var file = this.files[0];
  52. fileName = file.name;
  53. var reader = new FileReader();
  54. //reader回调,重新初始裁剪区
  55. reader.onload = function(){
  56. // 通过 reader.result 来访问生成的 DataURL
  57. var url = reader.result;
  58. //选择图片后重新初始裁剪区
  59. $image.cropper('reset', true).cropper('replace', url);
  60. };
  61. reader.readAsDataURL(file);
  62. });
  63. /*
  64. * 上传图片
  65. */
  66. $('#image_save').click(function() {
  67. var type = $image.attr('src').split(';')[0].split(':')[1];
  68. var canVas = $image.cropper("getCroppedCanvas", {});
  69. //将裁剪的图片加载到face_image
  70. $('#face_image').attr('src', canVas.toDataURL());
  71. canVas.toBlob(function(blob) {
  72. var formData = new FormData();
  73. formData.append("file", blob, fileName);
  74. http://172.16.5.102:9000/index1-cropper%E5%9B%BE%E7%89%87%E5%89%AA%E5%88%87%E4%B8%8A%E4%BC%A0.html
  75. $.ajax({
  76. type: "POST",
  77. url: 'http://172.16.5.102:8081/ssm_project/sysUser/uploadSysHeadImg.do',
  78. data: formData,
  79. contentType: false, //必须
  80. processData: false, //必须
  81. dataType: "json",
  82. success: function(res){
  83. //清空上传文件的值
  84. $('#btn1').val('');
  85. $('#success_image').attr('src', res.realPathList[0]);
  86. },
  87. error : function() {
  88. //清空上传文件的值
  89. $('#btn1').val('');
  90. }
  91. });
  92. }, type);
  93. });
  94. //取消
  95. $("#image_cancel").click(function() {
  96. //清空上传文件的值
  97. $(_pageId + inputFileId).val('');
  98. });
  99. });
  100. </script>
  101. </body>
  102. </html>

复制代码

效果图:

1048036-20171102190238498-401886395.jpg

#

3.2 index2-jquery-Form表单提交

复制代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <!-- 选择图片后,就开始上传 -->
  5. <meta charset="UTF-8">
  6. <meta name="viewport"
  7. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  8. <title>index2-jquery-Form表单提交</title>
  9. <script src="jquery.min.js"></script>
  10. <script src="jquery.form.js"></script>
  11. </head>
  12. <body>
  13. <img height="100" id="success_img"/>
  14. <form id="jvForm" action="o_save.shtml" method="post" enctype="multipart/form-data">
  15. <!-- 保存图片的相对路径,方便提交给后台,存到数据库 -->
  16. <input type="hidden" name="" id="img_path"/>
  17. <input type="file" id="select_file" onchange="uploadPic()" name="pic12"/>
  18. </form>
  19. <script>
  20. //上传图片
  21. function uploadPic(){
  22. //定义参数
  23. var options = {
  24. url:"http://172.16.5.102:8081/ssm_project/sysUser/uploadSysHeadImg.do",
  25. type:"post",
  26. dataType:"json",
  27. success:function(res){
  28. $('#success_img').attr('src', res.realPathList[0]); //真实完整路径
  29. $('#img_path').val(res.relaPathList[0]); //相对路径
  30. }
  31. };
  32. //jquery.form使用方式
  33. $("#jvForm").ajaxSubmit(options);
  34. }
  35. </script>
  36. </body>
  37. </html>

复制代码

效果图:

1048036-20171102190537826-1621770988.jpg

3.3 index3-jquery-ajax提交

复制代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <!-- 选择图片后,需要点击提交按钮,才开始上传,可以不需要form标签 -->
  5. <meta charset="UTF-8">
  6. <meta name="viewport"
  7. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  8. <title>index3-jquery-ajax提交</title>
  9. <script src="jquery.min.js"></script>
  10. </head>
  11. <body>
  12. <img id="success_img" height="100px">
  13. <br>
  14. <input type="file" id="upload_file">
  15. <!-- 保存图片的相对路径,方便提交给后台,存到数据库 -->
  16. <input type="hidden" name="" id="img_path"/>
  17. <input type="button" id="uploadPicButton" value="上传">
  18. <div>
  19. <a href="" id="download" download=""></a>
  20. </div>
  21. <script>
  22. //上传图片
  23. $('#uploadPicButton').click(function () {
  24. var pic = $('#upload_file')[0].files[0];
  25. var fd = new FormData();
  26. fd.append('uploadFile', pic);
  27. $.ajax({
  28. url:"http://172.16.5.102:8081/ssm_project/sysUser/uploadSysHeadImg.do",
  29. type:"post",
  30. data: fd, // Form数据
  31. cache: false,
  32. contentType: false,
  33. processData: false,
  34. success:function(res){
  35. $('#success_img').attr('src', res.realPathList[0]); //真实完整路径
  36. $('#img_path').val(res.relaPathList[0]); //相对路径
  37. $('#download').html(res.fileNameList[0]);
  38. $('#download').attr('href', res.realPathList[0]);
  39. $('#download').attr('download', res.fileNameList[0]);
  40. }
  41. });
  42. })
  43. </script>
  44. </body>
  45. </html>

复制代码

效果图:

1048036-20171102190738716-1996212041.jpg

1048036-20171102192029295-374699423.jpg

3.4 index4-WebUploader多文件上传

复制代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport"
  6. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7. <title>index4-WebUploader多文件上传</title>
  8. <link rel="stylesheet" href="lib/webuploader/dist/webuploader.css">
  9. <script src="jquery.min.js"></script>
  10. <script src="lib/webuploader/dist/webuploader.js"></script>
  11. <style>
  12. .file-item {
  13. display: inline-block;
  14. text-align: center;
  15. font-size: 12px;
  16. margin: 10px;
  17. }
  18. .file-item .progress {
  19. position: relative;
  20. height: 6px;
  21. width: 100%;
  22. background-color: #ddd;
  23. }
  24. .file-item .progress span {
  25. position: absolute;
  26. left: 0;
  27. top: 0;
  28. width: 0%;
  29. height: 6px;
  30. background-color: dodgerblue;
  31. }
  32. .suc-img-item {
  33. display: inline-block;
  34. height: 100px;
  35. margin: 10px;
  36. }
  37. </style>
  38. </head>
  39. <body>
  40. <h3>图片上传</h3>
  41. <!--dom结构部分-->
  42. <div id="uploader-demo">
  43. <h4>上传前缩略图</h4>
  44. <div id="fileList" class="uploader-list"></div>
  45. <div id="upInfo"></div>
  46. <h4>上传后预览图</h4>
  47. <div id="successImgList">
  48. <!--<img class="suc-img-item" src="http://172.16.5.102:8090/upload/4337bd72-57d3-4d26-b94e-61193e9fe440.jpg">-->
  49. <!--<img class="suc-img-item" src="http://172.16.5.102:8090/upload/4337bd72-57d3-4d26-b94e-61193e9fe440.jpg">-->
  50. </div>
  51. <div id="filePicker">选择文件</div>
  52. </div>
  53. <input type="button" id="btn" value="开始上传">
  54. <script>
  55. // // 图片上传demo
  56. $(function() {
  57. var $ = jQuery,
  58. $list = $('#fileList'),
  59. $successImgList = $('#successImgList'),
  60. ratio = window.devicePixelRatio || 1, // 优化retina, 在retina下这个值是2 (window.devicePixelRatio是设备上物理像素和设备独立像素(device-independent pixels (dips))的比例)
  61. thumbnailWidth = 50 * ratio, // 缩略图宽度
  62. thumbnailHeight = 50 * ratio, // 缩略图高度
  63. uploader; // Web Uploader实例
  64. // 初始化WebUploader
  65. uploader = WebUploader.create({
  66. auto: false, // 自动上传
  67. swf:'../js/Uploader.swf', // swf文件路径
  68. server: 'http://172.16.5.102:8081/ssm_project/sysUser/uploadSysHeadImg.do', // 文件接收服务端接口地址
  69. threads:'5', //同时运行5个线程传输
  70. fileNumLimit:'10', //文件总数量只能选择10个
  71. // 选择文件的按钮,可选
  72. pick: {
  73. id:'#filePicker', //选择文件的按钮
  74. multiple:true //允许可以同时选择多个图片
  75. },
  76. quality: 90, // 图片质量,只有type为`image/jpeg`的时候才有效
  77. compressSize: 0, // 单位字节,如果图片大小小于此值,不会采用压缩
  78. crop: true, //是否同意剪切
  79. //限制传输文件类型,accept可以不写
  80. accept: {
  81. title: 'Images', //描述
  82. extensions: 'gif,jpg,jpeg,bmp,png,mkv,mp4', //文件类型
  83. mimeTypes: '*/*' //mime类型(*/* 可以上传所有类型)
  84. },
  85. compress: false, //是否启用压缩
  86. resize: false, //尺寸不改变
  87. duplicate: false //是否允许重复上传
  88. });
  89. // 当有文件添加进来的时候,创建img显示缩略图使用
  90. uploader.on('fileQueued', function(file) {
  91. var $li = $('<div id="' + file.id + '" class="file-item thumbnail">' +
  92. '<img>' +
  93. '<div class="info">' + file.name + '</div>' +
  94. '<div class="progress"><span></span></div>' +
  95. '</div>'),
  96. $img = $li.find('img');
  97. $list.append($li); // $list为容器jQuery实例
  98. // 创建缩略图
  99. // 如果为非图片文件,可以不用调用此方法。
  100. // thumbnailWidth x thumbnailHeight 为 50 x 50
  101. uploader.makeThumb(file, function(error, src) {
  102. if (error) {
  103. $img.replaceWith('<span>不能预览</span>');
  104. return;
  105. }
  106. $img.attr('src', src);
  107. }, thumbnailWidth, thumbnailHeight);
  108. });
  109. // 文件上传过程中创建进度条实时显示。 uploadProgress事件:上传过程中触发,携带上传进度。 file:文件对象;percentage:传输进度 Nuber:类型
  110. uploader.on('uploadProgress', function(file, percentage){
  111. console.log(file);
  112. console.log(percentage);
  113. var $li = $('#'+file.id),
  114. $percent = $li.find('.progress span');
  115. // 避免重复创建
  116. if (!$percent.length) {
  117. $percent = $('<p class="progress"><span></span></p>').appendTo($li).find('span');
  118. }
  119. $percent.css('width', percentage * 100 + '%');
  120. });
  121. // 文件上传成功时候触发,给item添加成功class, 用样式标记上传成功。 file:文件对象, response:服务器返回数据
  122. uploader.on('uploadSuccess', function(file,res) {
  123. $('#'+file.id).addClass('upload-state-done');
  124. $("#upInfo").html("<font color='red'>"+res._raw+"</font>");
  125. $successImgList.append('<img class="suc-img-item" src="'+res.realPathList[0]+'">');
  126. });
  127. // 文件上传失败 file:文件对象 , code:出错代码
  128. uploader.on('uploadError', function(file,code) {
  129. var $li = $( '#'+file.id ),
  130. $error = $li.find('div.error');
  131. // 避免重复创建
  132. if(!$error.length) {
  133. $error = $('<div class="error"></div>').appendTo($li);
  134. }
  135. $error.text('上传失败!');
  136. });
  137. // 不管成功或者失败,文件上传完成时触发。 file: 文件对象
  138. uploader.on('uploadComplete', function( file ) {
  139. $('#'+file.id ).find('.progress').remove();
  140. });
  141. //绑定提交事件
  142. $("#btn").click(function() {
  143. console.log("上传...");
  144. uploader.upload(); //执行手动提交
  145. console.log("上传成功");
  146. });
  147. });
  148. </script>
  149. </body>
  150. </html>

复制代码

效果图:

1048036-20171102191133498-1922857900.jpg

四、查看文件服务器Tomcat下上传的文件

1048036-20171102192126201-1387197089.jpg

发表评论

表情:
评论列表 (有 0 条评论,578人围观)

还没有评论,来说两句吧...

相关阅读