文件上传(JQuery AJAX 的使用)。

实现文件上传功能的方法(使用jQuery) 在本文中,我们介绍了如何使用HTML、CSS和JavaScript创建一个简单的文件上传表单,并使用jQuery处理文件上传的逻辑。如果移动文件成功,则显示"文件上传成功"的消息,否则显示"文件上传失败"的消息。我们将使用HTML、CSS和JavaScript来创建一个简单的文件上传表单,并使用jQuery处理文件上传的逻辑。在上述代码中,我们设置了div元素的底部边距,并将文件输入字段的显示设置为none,以隐藏默认的文件选择按钮。在上述代码中,我们首先获取文件输入字段的值,并检查是否选择了文件。 阅读详情

今天在写一个文件上传的时候遇到了 问题 ! 无论如何都检索不到有上传的文件。上传的结果都只有文件的路径,上传的文件夹内一直没有文件。琢磨了好长时间,才解决问题。

客户端。

  1. 首先,我们看下页面的代码。这里以上传图片的代码为例。

我使用的是 layui 的官方框架。
form 表单提交,带有附件的时候,需要设置 enctype="multipart/form-data" 图中已给出。

Form上传文件
2. 紧接着,开始 使用 JQuery Ajax 对图片进行异步上传。
在这里插入图片描述
3. 这样后台就能够接收到带有附件表单上传的数据。
在这里插入图片描述

一、之前我经常使用的 AJAX 是这样的。

  1. 写一个简单的 ajax 访问:
$.ajax({
	url:"",		// 请求后台方法。
	type:"get",	// 请求方式
	cache:false,	// 控制是否缓存数据
	async:false,	// 控制同步还是异步
	data:{
		id:1
		//  传入数据
	},
	success:function(data){
		if(data != null && data != ""){
			$(".showdata").html(data);	// 从后台成功获取数据的回调函数
		}
	},
	error:function(){
		alert("网络错误,请重试 !!");
	}
});
  1. 使用的时候 需要注意两点信息
  • cache属性,默认是 true ,就是页面需要缓存。有些时候修改了值,但是值没变,都是由于缓存的原因。ajax 请求存在着许多缓存问题。请求方式为 post 的时候,默认为 false ;请求方式为 get 的时候,默认为 true 。
  • async属性,默认是 true,决定本次执行的 ajax 请求是异步的。同步指的是:像后台代码一样,一行一行的执行。异步指的是:ajax 请求还没有执行完成就去执行下一句 js 。
  1. ajax 简单来说,就是请求后台,获取数据回调,然后页面展示。

二、但是 AJAX 文件上传更应该注意下面的内容。

  1. 经常用 ajax 的人都知道,ajax 的默认编码方式是 “application/x-www-form-urlencoded”,此编码方式只能编码文本类型的数据,因此 ajax 发送请求的时候,会把 data 序列化成一个个 String 类型的键值对,大部门应用都可以满足。
  2. 就是上述的原因,导致今天的错误。所以此序列化机制是文件上传的绊脚石。
  3. 我们需要做的是,(1)获取表单的内容,赋值给 ajax 的data;(2)阻止将参数转成String类型的键值对。
  • FormData 是 html5 的接口,使用它一行代码便可以拿到整个表单的内容。
var form = new FormData(document.getElementById("mulform"));
//  mulform 是表单的 id 。
  • 设置 process 属性,阻止转成 String 类型的字符串。同时设置 ajax 的编码方式为false(contentType:fals),在 form 表单里已经设置了编码方式,ajax 的编码机制已经不需要。
$.ajax({
	url : "../../addActivity.action",
	type : "post",		// 默认 对应的 cache:false
	dataType : "json",
	processData:false,
	contentType:false,
	data:form,
	success : function(data){
		location.reload();
	},
	error:function(){
		top.layer.msg("网络错误,请重试 !!");
	}
});
  • 务必 使用 post 的请求方式,。

contentType 的编码方式:

  1. application/x-www-form-urlencoded:String 类型的键值对。
  2. multipart/form-data:支持文件上传。
  3. application/json类型主要是传递json数据用到,层次比较深的数据。
  4. text/plain:窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。

2.1 其中的关键要素。

  1. contentType:(默认的编码方式 “application/x-www-form-urlencoded”)发送信息至服务器时内容编码类型。
  2. processData:(默认 true )默认情况下,通过 data 属性传进来的数据,都会转化成一个字符串,配合默认内容类型"application/x-www-form-urlencoded",如果要发送 DOM 树、文件内容或其他希望转换的信息,需要设置为 true 。
  3. FormData :利用 这个对象,我们可以通过 JavaScript 用一些键值对来模拟一系类表单控件,还可以异步上传一个 二进制文件。

更多内容请参考 W3C

2.2 这里补充一个既能获取文件,又能获取表单数据的方式

  • 这里通过 new FormData 创建了 fileFrom 表单的对象。
    在这里插入图片描述
  • 下图就是断点停留的地方,可以看到文件与表单的内容都可以获取到的,只不过需要设置一下实体类中的文件路径。
    在这里插入图片描述

服务器。

目前呢,我对上传文件的操作还只是初步了解,如果哪位大神有更好的方法,希望能够分享给我的啦。

需要两个 Jar 包。

1. commons-fileupload.jar 包文件。
<dependency>
	<groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>
2. commons-io.jar 包文件。
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

SpringMVC 配置文件解析器CommonsMultipartResolver

<!-- 多部分文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
     <property name="maxUploadSize" value="104857600" />
     <property name="maxInMemorySize" value="4096" />
     <property name="defaultEncoding" value="UTF-8"></property>
</bean>

单文件接收 MultipartFile 以及 多文件接收 MutipartFile[]

  1. 对于MulipartFile,只需要这样就可以了:MultipartFile file, HttpServletRequest request
@RequestMapping("uploadFile")
public String  fileUpload(MultipartFile file, HttpServletRequest request) throws IOException {
}
  1. 对于CommonsMultipartFile,需要@RequestParam(“file”) CommonsMultipartFile Filedata, HttpServletRequest request,不然不会进此方法。
@RequestMapping("uploadFile")
public String  fileUpload(@RequestParam("file") CommonsMultipartFile Filedata, HttpServletRequest request) throws IOException {
}

通过流的方式上传文件

@RequestParam(“file”) 将name=file控件得到的文件封装成CommonsMultipartFile 对象
通过字节流的方式,读取文件 file.getInputStream(); ,之后通过 OutputStream 写在指定目录。

@RequestMapping("fileUpload")
public String  fileUpload(@RequestParam("file") CommonsMultipartFile file) throws IOException {
    //	文件上传的开始时间
    long  startTime=System.currentTimeMillis();
    System.out.println("fileName:"+file.getOriginalFilename());
    try {
        //获取输出流
        OutputStream os=new FileOutputStream("D:/"+new Date().getTime()+file.getOriginalFilename());
        //获取输入流 CommonsMultipartFile 中可以直接得到文件的流
        InputStream is = file.getInputStream();
        int temp;
        //一个一个字节的读取并写入
        while((temp=is.read())!=(-1))
        {
            os.write(temp);
        }
       os.flush();
       os.close();
       is.close();
    } catch (FileNotFoundException e) {
        throw new Exception("异常:文件找不到");
    }
    long  endTime=System.currentTimeMillis();
    System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");
    return "/success"; 
}

file.transferTo 方式上传文件

只需要规定文件上传文件的路径就可以对文件进行上传。

 @RequestMapping("fileUpload2")
 public String  fileUpload2(@RequestParam("file") CommonsMultipartFile file) throws IOException {
      long  startTime=System.currentTimeMillis();
     System.out.println("fileName:"+file.getOriginalFilename());
     String path="D:/"+new Date().getTime()+file.getOriginalFilename();
     File newFile=new File(path);
     // file.transTo 方式上传文件,直接写文件
     file.transferTo(newFile);
     long  endTime=System.currentTimeMillis();
     System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");
     return "/success"; 
 }

使用 SpringMVC 同时上传文件与数据。

## 文本数据上传表单数据过大,使用 POST 提交
@RequestMapping(value="/upload" ,method=RequestMethod.POST)
public String test(User user,@RequestParam(value="uploadFile",required=false) MultipartFile uploadFile) throws Exception, IOException{
	System.out.println("上传文件操作开始……");
	String path = null;	// 设置存储路径为空
	if(!(uploadFile.isEmpty())){
		System.out.println("上传的文件不为空,进行路径操作");
		//	获取保存文件的绝对路径,存放到项目路径下。File.separator 是 io 文件下的字符串 \
		String path = request.getSession().getServletContext().getRealPath("statics"+File.separator+"uploadfiles");
		System.out.println("2.1 uploadFile path ===>"+path);
		//	获取上传文件的文件名
		String oldFileName = uploadFile.getOriginalFilename();//原文件名
		System.out.println("2.2 uploadFile oldFileName ===>"+oldFileName);
		//	获取文件名后缀
		String suffix = oldFileName.substring(oldFileName.lastIndexof('.')); //	原文件名后缀
		System.out.println("2.3 uploadFile suffix ===>"+suffix );
		//设置文件大小的变量,KB是单位
		int filesize = 5000000;
		System.out.println("2.4 uploadFile filesize ===>"+uploadFile.getSize());
		if(uploadFile.getSize() > filesize){
			request.setAttribute("uploadFileError", "* 上传大小不得超过5000KB");
			System.out.println("* 上传大小不得超过5000KB");
			return "useradd";
		}else if(prefix.equalsIgnoreCase("jpg")
				   || prefix.equalsIgnoreCase("png")
				   || prefix.equalsIgnoreCase("jpeg")){
			// 上传格式正确,重新取得一个文件的路径。
			String fileName = System.currentTimeMillis()+RandomUtils.nextInt(1000000)+".jpg";
			System.out.println("2.5 new fileName===>"+uploadFile.getName());
			//	新建一个文件,File API,这样就可以为文件重定义名字。
			File targetFile = new File(path,fileName); 
			if(!targetFile.exists()){		// 判断文件是否存在,存在就上传覆盖了,
				targetFile.mkdirs(); 		// 不存在就创建。
			}
			//保存
			try{
				//  上传
				uploadFile.transferTo(targetFile);
			}catch (Exception e){
				e.printStackTrace();
				request.setAttribute("uploadFileError", "* 上传失败! ");
				System.out.println("* 上传失败! ");
				return "useradd";
			}
			path = path+File.separator+fileName;
		}else{
			request.setAttribute("uploadFileError", "* 上传格式错误!");
			System.out.println("* 上传格式错误!");
			return "useradd";
		}
	}
	user.setPicPath(path);
	System.out.println("user is: "+user);
	return "userlist";	
}
  • 其中 ,File 有固定的字符串可以使用。
    在这里插入图片描述
使用 Ajax 上传文件 下面的函数将选定的文件从。 阅读详情

相关推荐

jquery-大文件上传插件,支持分片上传,断点续传

用于在网页端上传大文件,大图片,可以设置多个上传参数,提供了多种回调. 可以任意绑定id,自动生成上传表单,可以自定义文件头,其它参数,设置最大上传,最小上传,以及判断上传类型,现已支持断点续传

上传文件—ajax

formdata三步走1 获取表单元素2 创建formdata 将表单元素传入3 send()传入服务器// 将用户选择的文件,添加到 FormData 中。

m0_73605639的博客 7533

Mamba vs YOLO:目标检测选型指南(附实际项目对比)

本文深入对比了Mamba和YOLO在目标检测领域的性能差异与应用场景。通过实际项目数据,分析了两者在城市交通监控、工业质检等场景下的表现,提供了详细的选型指南和部署优化建议,帮助开发者根据实时性、精度等需求选择最适合的解决方案。

weixin_29062255的博客 368

jQuery实现文件上传

介绍了如何使用jQuery实现文件上传

凉茶铺的博客 5581

用Keil5给CH552G编程:手把手配置8051开发环境+LED闪烁实战

本文详细介绍了如何使用Keil5为CH552G单片机配置8051开发环境,并完成LED闪烁实战。从获取必要软件、安装WCH器件库到创建工程、编写程序及烧录,手把手指导开发者避开常见陷阱,特别适合从STC转向CH552G的开发者。

weixin_30733003的博客 539

VL53L0X加盖玻片后精度暴跌?手把手教你完成串扰校准(CrossTalk Calibration)

本文详细解析了VL53L0X激光测距传感器加盖玻片后精度下降的原因,并提供了串扰校准(CrossTalk Calibration)的完整解决方案。通过分步指导和实用代码示例,帮助工程师恢复毫米级测距精度,适用于智能门锁、扫地机器人等应用场景。

weixin_33708432的博客 539

使用jquery的ajax formdata对象提交文件上传

以前的项目大多的使用jquery的插件来进行文件上传,对于就只引用jquery而不使用插件来上传文件之前未有写过,最近项目里有写到和用到,就记录一下,以后方便查找。 提示:存在浏览器皆容问题,谨慎使用。 HTML代码: &amp;amp;lt;form id=&amp;quot;infoLogoForm&amp;quot; enctype='multipart/form-data'&amp;amp;gt; &amp;amp;lt;div class=

fxbar的博客 2861

高频面试题-项目介绍篇

聊聊如何介绍项目经历。

m0_73359763的博客 1908

使用Java、Jquery、Ajax实现的带进度条的文件上传。

昨天下午,没有事干,就写了一个带进度条的文件上传功能,需要自己可以去下。其实要实现这个功能很容易,如果得到这个两个数据的话,第一个:上传文件的大小,第二个:已经上传多打的数据,可问题是怎么得到这两个数据?这个就有点困难了,刚开始想使用Struts2来做的,可是使用available来获取上传文件的大小,每次获取的都是已经上传到服务器上得大小,死活获取不到还没有上传的大小,不知道是为什么,如果有人使

取与舍 6370

标签传播算法LPA:半监督学习解决标注数据不足的完整实战指南

在机器学习实际工程中,标注数据稀缺往往是制约模型性能的核心瓶颈。半监督学习提供了一条利用海量未标注数据来增强模型泛化能力的有效路径,其中标签传播算法(Label Propagation Algorithm, LPA)因其直观的图结构和优雅的数学原理而备受关注。LPA通过将样本映射为图中的节点,以相似度作为边权重,让已知标签沿着图结构不断扩散,从而实现对未知样本的预测。其背后基于聚类假设与流形假设,能在低标注率场景下显著缓解过拟合问题,提升分类准确率。该技术在文本分类、金融风控、图像识别等存在大量无标注数据的

weixin_29056781的博客 241

华为MetaERP PTP采购到应付全流程解析

摘要:本文系统解析华为MetaERP中的PTP(采购到应付)全流程管理方案,涵盖从采购申请到付款执行的完整业务流程。文章详细分解了PR、PO、GR、IV、AP等关键环节的财务核算规则,并提供了预算校验、库存更新等Python代码示例。同时阐述了IT落地架构设计,包括会计引擎配置、系统集成方案及银企直连支付接口实现。该方案通过三单匹配自动化和智能会计引擎,将处理效率提升10倍(200笔/人天→2000笔/人天),实现98%的自动化率,为集团企业提供了高效的数字化财务管理样板。文中所有技术方案均需根据实际场景调

金牌架构师 1743

jquery中的ajax基本使用以及文件上传

jquery中的ajax $.ajax({ url:'/',//请求访问的地址 type:'get/post/put/delet',//访问方式 data:{},//如果是提交数据就需要填写data async:false/true,//true为异步,false为同步 beforeSend:function(){},//请求数据发送之前执行的方法 success:function(res){//请求成功之后,返回success成功之后的数据,会自动处理成json格

aflylong的博客 470

6.4 直流无刷电机(BLDC):测试与性能评估

本文系统阐述了直流无刷电机(BLDC)的测试与性能评估方法,涵盖参数测量、性能测试、测试平台设计及可靠性评估。详细介绍了绕组电阻、电感和反电动势的测量原理与修正方法,以及转矩-转速特性、效率分析和动态响应测试的技术要点。通过搭建高精度测功机系统,结合自动化数据处理,实现对电机性能的全面评估。最后讨论了温升、振动、EMC等特殊测试方法,为BLDC电机的设计验证和质量控制提供了完整的技术路径。

技术工作者 444

ajax文件上传,使用Jquery.form插件的例子

在使用ajax进行文件上传的提交请求时会十分麻烦,于是发现了jquery.form.js插件 下载地址:https://www.bootcdn.cn/jquery.form/ 做的是一个动态轮播图的demo,可供大家参考 另外使用轮播图插件swiper的帖子在这里: https://blog.youkuaiyun.com/weixin_44253204/article/details/104199887 1....

Running的博客 233

Python爬虫实战:美团商家数据采集系统

本文将详细介绍如何使用Python最新技术栈构建高效的美团商家信息采集系统。内容涵盖异步爬虫、反爬对抗、数据存储、可视化分析等完整流程,提供可落地的代码方案和工程实践。

2201_76125261的博客 2660

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

使用ajax文件上传405是什么原因,jQuery+ajax文件上传失败,什么原因?

html部分:文件上传后端php部分:ajax.phpheader("Content-Type: text/html;charset=utf8");move_uploaded_file($_FILES["pic"]["tmp_name"],"./" . "www.png");?>js部分,用js上传的时候是成功的,但用jquery的时候出现了两种错误:一种是用$.ajax方法:$(funct...

weixin_39644611的博客 354

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

使用jquery+ajax实现文件上传

FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个”表单”。在 Mozilla Developer 网站 使用FormData对象 有详尽的FormData对象使用说明。但上传文件部分只有底层的XMLHttpRequest对象发送上传请求,那么怎么通过jQuery的Ajax上传呢? 本文将介绍通过jQuery使用FormData对象上传

Medivh_的博客 1057

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

html5支持ajax和jQuery吗,使用HTML5文件上传与AJAX和jQuery(Using HTML5 file uploads with AJAX and jQuery)...

使用HTML5文件上传与AJAX和jQuery(Using HTML5 file uploads with AJAX and jQuery)诚然,Stack Overflow上有类似的问题,但似乎并不能满足我的要求。这是我要做的:上传整个数据形式,其中一个是单个文件使用Codeigniter的文件上传库直到这里,一切都很好。 数据在我的数据库中需要。 但我也想通过AJAX的帖子提交我的表单:使用本...

weixin_31202821的博客 195

ASP.NET使用JQUERY AJAX文件上传DEMO_异步文件上传例子

转载于:http://dditblog.com/itshare_195.html 本文提供了一种简单的ASP.NET Web API的文件上传方式、使用jQuery AJAX的方式上传图片文件 接下来我将展示如何添加一个Web API的控制器、以及使用它上传文件 步骤: 1、添加一个空的ASP.NET Web应用程序,我使用了Visual Studio2013创建了这个

NDHuaErFeiFei的博客 851

基于SSM使用jquery.from.js实现ajax文件上传

前端JSP页面代码 <body> <form id="queryForm" name="queryForm" action="" method="post"> <input id="filename" name="filename" type="file"> <button onclick="sub()">提交</button> </form> </b

hongguapi的博客 2837

使用jquery的ajax提交文件上传,纯jquery

核心代码为,但可能存在兼容性问题,所以建议使用ajaxFileUpload控件。new FormData($('#infoLogoForm')[0]), var uploading = false; $("#ctn-input-file").on("change", function(){ if(uploading){ alert("文件正在上传中,请稍候");

10年老码农 446

H5API-jQuery的ajax使用FormData、拖拽文件上传、cookie

#H5API-jQuery的ajax使用FormData、拖拽文件上传、cookie ##7.1 jQuery的ajax使用FormData 注意:jquery 需要设置process:false, contentType:false;否则直接写data:fd会出错 ###例子:jQuery的...

332

Struts2 Ajax文件上传功能 使用Jquery.form插件

jquery form 教程地址:http://www.malsup.com/jquery/form/#getting-started Form表单: Upload : JS 脚本 //upload excel

Xwin1989的专栏 5677

ajax中web文件怎么写,Web API中使用jQuery AJAX实现文件上传

在Web API中使用jQuery AJAX实现文件上传的例子,传统的form表单提交会导致页面刷新,但是在有些情况下,我们不希望页面被刷新,这种时候我们都是使用Ajax的方式进行请求,将文件post后台api接口上传到服务器,后端开发者可以借鉴学习。资源下载此资源下载价格为2D币,请先登录资源文件列表TestFileUpload/packages/Microsoft.AspNet.WebApi....

weixin_29351351的博客 202

使用jquery的ajax提交文件上传

以前的项目大多的使用jquery的插件来进行文件上传,对于就只引用jquery而不使用插件来上传文件之前未有写过,最近项目里有写到和用到,就记录一下,以后方便查找。 提示:存在浏览器皆容问题,谨慎使用。 HTML代码: <form id="infoLogoForm" enctype='multipart/form-data'> <div class="cnt-...

weixin_30244889的博客 81

SpringMvc中实现文件上传和下载——前端使用html+jquery+ajax

下面步骤中主要讲解如何实现文件上传,关于SSM的详细配置见SSM配置整合 项目的相关结构如下 1)导入相应的maven依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.

鹿谷門実的博客 1035
上一篇: SpringBoot 设置 application.properties 提示
下一篇: HTML 文档的加载顺序
Roobert_Chao
博客等级 码龄9年 89粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值