Ajax进行文件与参数上传步奏详解

这次给大家带来Ajax进行文件与参数上传步奏详解,Ajax进行文件与参数上传的注意事项有哪些,下面就是实战案例,一起来看一下。

文件上传:

记得前一段时间,为了研究Ajax文件上传,找了很多资料,在网上看到的大部分是form表单的方式提交文件,对于Ajax方式提交文件并且也要提交表单中其他数据,发现提及的并不是很多,后来在同事的帮助下,使用ajaxfileupload最终完成了文件上传与其他提交的操作,现在分享给大家,希望大家能有有所帮助。

操作步骤:

1 导入jar包:

我们在使用文件上传时,需要使用到两个jar包,分别是commons-io与commons-fileupload,在这里我使用的两个版本分别是2.4与1.3.1版本的,需要使用JS文件与jar包最后会发给大家一个连接(如何失效请直接我给留言,我会及时更改,谢谢)。

2 修改配置文件:

当我们导入的jar包是不够的,我们需要使用到这些jar包,由于我当时使用的是SSM框架,所以我是在application-content.xml中配置一下CommonsMultipartResolver,具体配置方法如下:

       104857600          4096     

登录后复制

3 JSP文件:

大家对form表单提交问价的方式很熟悉,但是我们有很多情况下并不能直接使用form表单方式直接提交。这时候我们就需要使用Ajax方式提交,Ajax有很多的好处,比如当我们不需要刷新页面获希望进行局部刷新的时候,我们就可以使用Ajax。下面是我的表单提交的JSP页面,其中包含JS的详细步骤和HTML文件:

发布资讯     function save(){  var typeId = $("#type_span_info").attr("data-id");   if (typeof (typeId) == "undefined") {   $("#type_p_info").show();   return;  } else {   $("#type_p_info").hide();  }  var title = $("#title_input_info").val();  var summary = $("#summary_input_info").val();  var content = $("#content_textarea_info").val();  $.ajaxFileUpload({   url : "${ctx}/info/doUpload",   secureuri : false,//是否需要安全协议   fileElementId : 'file',   type : 'POST', //文件提交的方式   dataType : 'string',   cache : false, //是否进行页面缓存   async : true, // 是否同步提交   success : function(data) {      $.ajax({     url : '${ctx}/info/addInfo?fileUrl='+data,     type : 'post',     data:{title:title,summary:summary,content:content,typeId:typeId},     async : false,     success : function(result) {      if (result == 1) {        $("#del_prompt_p").text("添加成功");       fnError3();      } else if (result == 2) {       $("#del_prompt_p").text("添加失败")       fnError2();      } else {       $("#del_prompt_p").text("系统错误");       fnError2();      }     }     });    }   });   } 

发布资讯

*标题

<!-- -->

<!--

请选择标题!

-->

*摘要

*内容

*选择行业

请选择行业!

请选择

  • 化工
  • 装备制造
  • 生物医药
  • 电子信息
  • 其他

发布

取消

登录后复制

上面的代码是我在项目实际开发的过程中所用的代码,具体的CSS文件与JS文件我已经删掉了,但是不会影响具体的操作,大家使用的时候只需要把其中的class文件删掉了就可以了。好了,我们在说一说上面的代码。首先为大家解释一下ctx的作用,在我们项目开发的过程中,我们要求必须使用绝对路径,所有{ctx}是我们封装好的一个东西,就是我们的服务器地址+端口号+项目名称。当我们使用的时候,只需要引用一下文件,就是上面直接使用的,当我们用的时候直接使用${ctx}就可以,大家在使用的时候就直接使用自己的本机地址端口号与项目名称就可以。后面的/resources/new_js/jquery.js就是我们要使用的jqery.js文件的存放地址。
其实在上面的Ajax的操作中,我相当于做了两次的Ajax的提价,但是在第一次提交的时候,后台给我们返回一个参数,就是我们的文件存放路径与文件名称,在第二次提交的时候,我们将这些参数与其他参数同时上传到后台,并将这些参数保存到数据库中,以便我们使用。

* 4 后台代码:

//文件上传@RequestMapping(value = "/doUpload", method = RequestMethod.POST, produces = "text/html; charset=UTF-8")@ResponseBody public String doUpload(HttpServletRequest request, HttpServletResponse response) throws IOException {  List fileNames = null;  if (request instanceof MultipartHttpServletRequest) {   // process the uploaded file   logger.info("=====进入文件类型选择=====");   fileNames = uploadAttachment(request, "file");  }  String url = "";  if (fileNames.size() > 0) {   for (int i = 0; i < fileNames.size(); i++) {    url = url + fileNames.get(i);    if(i < fileNames.size() - 1){     url = url + ",";    }   }  }  return url; } //文件上传的工具类public List uploadAttachment(HttpServletRequest request, String type) throws IOException {  MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;  List files = multipartRequest.getFiles(type);  logger.info("数据长度========>>>>>>>>>>" + files.size());  Calendar now = Calendar.getInstance();  int year = now.get(Calendar.YEAR);  int month = now.get(Calendar.MONTH) + 1;  String realPath = PropertiesUtil.getProperty("realPath");  System.err.println("realpath=====>>>>>" + realPath);  //String savePath = request.getSession().getServletContext().getRealPath("/") + "p_image\" + type + "\" + year+ "\" + month + "\";  String savePath = "government"+ File.separator + "image"+ File.separator + year+ File.separator + month + File.separator;  logger.info("保存路径=====>" + savePath);  List fileNames = new ArrayList();  for (MultipartFile multipartFile : files) {   logger.info("--" + multipartFile.getOriginalFilename());   String fileName = multipartFile.getOriginalFilename();   String prefix = fileName.substring(fileName.lastIndexOf(".") + 1);   String custName = "" + System.currentTimeMillis() + "." + prefix;   if (UsedUtil.isNotNull(fileName)) {    File targetFile = new File(realPath+savePath, custName);    // fileName = year+"-"+month+"-"+fileName;    if (!targetFile.exists()) {     targetFile.mkdirs();     multipartFile.transferTo(targetFile);    }    try {    } catch (Exception e) {     e.printStackTrace();    }    fileNames.add(savePath + custName);   }  }  return fileNames; }//添加咨询@RequestMapping(value = "/addInfo", method = RequestMethod.POST)@ResponseBody public Integer addInfo(HttpServletRequest request, HttpServletResponse response,   @RequestParam String fileUrl) {  InfoBean bean = new InfoBean();  if(UsedUtil.isNotNull(fileUrl)){   bean.setImagePath(fileUrl);  }  Map paramMap = ControllerUtil.request2Map(request);  bean.setTitle((String) paramMap.get("title"));  bean.setSummary((String) paramMap.get("summary"));  bean.setContent((String) paramMap.get("content"));  bean.setTypeId((String)paramMap.get("typeId"));  return infoService.insInfo(bean); }

登录后复制

在上面的代码中我们可以看到,在文件第一次上传的过程中,我们首先进入到doUpload中,然后使用uploadAttachment工具类,并将文件上传到服务器中,在上传的过程中,我首先做了一个文件唯一名称的操作,就是获取当前时间的毫秒数,虽然不能绝对保证,但是到并发量小的时候可以保证不会造成文件名称重复。然后,我将文件上传的路径的上传地址写到了.properties中,这样的好处是当我们想更换文件上传的路径时,我们就可以直接修改.properties文件,而读取.properties文件的具体方式在我的另一篇文章中讲到。最后,我们在开发的过程中,文件保存一般是保存到文件服务器中,而文件服务器一般是在Linux中,而在不同的服务器中,路径是使用斜杠还是反斜杠是不同的,所有我在这里面使用了File.separator来代替,File.separator在不同的系统中可以自动生成斜杠获反斜杠。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

异步的文件或图片上传ajax

ajax传递json时为什么会出现乱码

以上就是Ajax进行文件与参数上传步奏详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2776024.html

(0)
上一篇 2025年3月8日 14:37:41
下一篇 2025年3月8日 14:37:53

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Ajax打开新窗口被拦截时如何处理

    这次给大家带来Ajax打开新窗口被拦截时如何处理,处理Ajax打开新窗口被拦截的注意事项有哪些,下面就是实战案例,一起来看一下。 最近在做支付时发现打开支付窗口时被浏览器拦截了,百度了一下才发现是因为打开窗口前用ajax验证是否能支付,所以…

    编程技术 2025年3月8日
    200
  • Ajax提交参数时html标签提交失败如何处理

    这次给大家带来Ajax提交参数时html标签提交失败如何处理,处理Ajax提交参数时html标签提交失败的注意事项有哪些,下面就是实战案例,一起来看一下。 最近在公司做资源及文章上传功能遇到一个小问题,被坑了好半天。         该功能…

    编程技术 2025年3月8日
    200
  • Ajax提交表单页面后阻止刷新的方法

    这次给大家带来Ajax提交表单页面后阻止刷新的方法,Ajax提交表单页面后阻止刷新的注意事项有哪些,下面就是实战案例,一起来看一下。 注:使用ajax 提交表单时 type类型最好不用submit 用button合适 function fo…

    编程技术 2025年3月8日
    200
  • Ajax怎么操作post请求跳转页面

    这次给大家带来Ajax怎么操作post请求跳转页面,Ajax操作post请求跳转页面的注意事项有哪些,下面就是实战案例,一起来看一下。 最近因为公司需求,需要ajax post请求并跳转界面,网上搜了一下资料,差不多都是用window.lo…

    编程技术 2025年3月8日
    200
  • 在Lavarel框架中ajax需要怎么提交表单

    这次给大家带来在Lavarel框架中ajax需要怎么提交表单,在Lavarel框架中ajax提交表单的注意事项有哪些,下面就是实战案例,一起来看一下。 laravel简介: Laravel是一套简洁、优雅的PHP Web开发框架(PHP W…

    编程技术 2025年3月8日
    200
  • Ajax实现加载进度条的步奏详解

    这次给大家带来Ajax实现加载进度条的步奏详解,Ajax实现加载进度条的注意事项有哪些,下面就是实战案例,一起来看一下。 ajax beforeSend: 先说说这个 beforeSend, 在请求发送前执行 比如 可以判断用户有没有登录 …

    编程技术 2025年3月8日
    200
  • Ajax怎么做出关键字智能匹配搜索

    这次给大家带来Ajax怎么做出关键字智能匹配搜索,Ajax做出关键字智能匹配搜索的注意事项有哪些,下面就是实战案例,一起来看一下。 准备数据keyword.json:(这里只贴出部分数据) [ {“id”:1,”initial”:”ad”,…

    2025年3月8日
    200
  • 使用Ajax实现根据人力资源系统数据增加OA账号的方法

    这次给大家带来使用Ajax实现根据人力资源系统数据增加OA账号的方法,使用Ajax实现根据人力资源系统数据增加OA账号的的注意事项有哪些,下面就是实战案例,一起来看一下。 本次小飞鱼开发的程序主要解决某下属公司在人力系统中增加账号不能马上审…

    2025年3月8日
    200
  • ajax操作图层遮挡页面

    这次给大家带来ajax操作图层遮挡页面,ajax操作图层遮挡页面的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 相信每位开发者都应该有所了解,当用户发出AJAX请求时,如果长时间处于请求阶段,而没有给出用户回应,会给用户造成错觉,…

    编程技术 2025年3月8日
    200
  • ajax跨域访问报错501怎么处理

    这次给大家带来ajax跨域访问报错501怎么处理,处理ajax跨域访问报错的注意事项有哪些,下面就是实战案例,一起来看一下。 问题:ajax跨域访问报错501 运行下面的代码会报错501 $.ajax({ type: “POST”, url…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论