原文地址: https://blog.jijian.link/2020-07-28/jquery-ajax-upload-file/

一般上传方式

const file = document.getElementById('js_resume_file').files[0];
const formData = new FormData();
formData.append('file', file);
$.ajax({
type: 'POST',
url: 'api',
data: formData,
contentType: 'multipart/form-data',
processData: false,
success: function (data) {
console.log('上传完毕');
},
});

如果代码是以上方式,大概率后端接口会报错 500。但是后端自测接口正常!

详细对比正常上传的 Network ,会发现 Request Headers 字段 Content-Type 不同,缺少了 boundary 字段。并且携带数据也不一样,Form Data 变成了 Request Payload

自测接口正常的 Content-Type 如下:

Request Headers
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryInLo99EGvBmy5YZN Form Data
file: (binary)

500 错误的 Content-Type 如下:

Request Headers
Content-Type: multipart/form-data Request Payload
------WebKitFormBoundaryZ1vno04nVnWqUY5K
Content-Disposition: form-data; name="file"; filename="test.jpg"
Content-Type: image/jpeg ------WebKitFormBoundaryZ1vno04nVnWqUY5K--

处理方式

const file = document.getElementById('js_resume_file').files[0];
const formData = new FormData();
formData.append('file', file);
$.ajax({
type: 'POST',
url: 'api',
data: formData,
- contentType: 'multipart/form-data',
+ contentType: false,
processData: false,
success: function (data) {
console.log('上传完毕');
},
});

处理方式很简单,将 contentType: false 即可。

原因:jquery ajax 源码中有一段这代码:

// Set the correct header, if data is being sent
if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
jqXHR.setRequestHeader( "Content-Type", s.contentType );
}

如果你手动设置了 contentType ,那么就用你设置的值来处理 Request Headers ,所以还是老实的设置为 false 吧!

jQuery ajax 文件上传 Request Headers 缺少 boundary的更多相关文章

  1. 兼容ie的jquery ajax文件上传

    Ajax文件上传插件很多,但兼容性各不一样,许多是对ie不兼容的,另外项目中是要求将网页内容嵌入到桌面端应用的,这样就不允许带flash的上传插件了,如:jquery uploadify...悲剧 对 ...

  2. Struts2 使用Jquery+ajax 文件上传

    话不多说 直接上代码 前台js: var formData = new FormData(); formData.append("file1",$("#file1&quo ...

  3. ASP.NET 异步Web API + jQuery Ajax 文件上传代码小析

    该示例中实际上应用了 jquery ajax(web client) + async web api 双异步. jquery ajax post $.ajax({ type: "POST&q ...

  4. 简单的jquery ajax文件上传功能

    /* * 图片上传 * 注意如果不加processData:false和contentType:false会报错 */ function uploadImage(image) { var imageF ...

  5. jQuery插件AjaxFileUpload实现ajax文件上传

    转自:http://www.cnblogs.com/linjiqin/p/3530848.html jQuery插件AjaxFileUpload用来实现ajax文件上传,该插件使用非常简单,接下来写个 ...

  6. 转: 如何实现jQuery的Ajax文件上传

    [PHP文件上传] 在开始之前,我觉得是有必要把通WEB上传文件的原理简单说一下的.实际上,在这里不管是PHP,JSP,还是ASP处理上传的文件,其实都是WEB早已把文件上传到服务器了,我们只是运用上 ...

  7. jQuery插件AjaxFileUpload实现ajax文件上传时老是运行error方法 问题原因

    今天在用jQuery插件AjaxFileUpload实现ajax文件上传时,遇到一个问题,如图: 老是运行error.无法运行succes方法,追踪ajaxfileupload.js源代码发现: wa ...

  8. jquery.form.js官方插件介绍Form插件,支持Ajax,支持Ajax文件上传

    jquery.form.js官方插件介绍Form插件,支持Ajax,支持Ajax文件上传 http://www.malsup.com/jquery/form/#getting-started [JQu ...

  9. [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传

    原文 [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传 Fine Uploader(http://fineuploader.com/)是一个实现 ajax 上传文件 ...

  10. 使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html

    使用ajax提交form表单,包括ajax文件上传 前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){ ... },&qu ...

随机推荐

  1. 使用archlinux AUR源下载安装的方法 以及 解决makepkg网络连接超时(time out)的问题

    1.使用archlinux(AUR)源下载安装软件/驱动的方式 2.解决使用此方时无法通过网络下载资源文件的问题(网络连接超时/time out) 1.使用archlinux(AUR)源下载安装软件/ ...

  2. oracle用命令执行sql脚本文件

    当sql命令过多(sql文件过大)时,用plsql执行时比较慢而且容易超时,此时可以用sqlplus命令直接执行sql脚本文件,方法如下: 1.sqlplus登录 >sqlplus userna ...

  3. Iframe标签显示目标网页的指定区域,视频可全屏可缩小

    由于播放的直播视频有多余的logo和聊天框等所以需要去掉,用Iframe标签显示目标网页的指定区域,视频可全屏可缩小 用自己私人的服务器来测试吧,99买阿里云 HTML代码 <html> ...

  4. Qt开源作品35-秘钥生成器

    一.前言 在很多商业软件中,需要提供一些可以试运行的版本,这样就需要配套密钥机制来控制,纵观大部分的试用版软件,基本上采用以下几种机制来控制. 远程联网激活,每次启动都联网查看使用时间等,这种方法最完 ...

  5. 2025年了,你还不会配置Jetson Orin NX嘛?

    2025年了,你还不会配置Jetson Orin NX嘛? 我的设备为:Jetson Orin NX 16G + JetPack6.1+达妙科技载板 帅气的Jetson Orin NX拿到手了,都20 ...

  6. GNU Make中CPPFLAGS和CXXFLAGS之间的区别

    GNU Make 是一个流行的构建工具,用于编译和链接源代码.在 GNU Make 中,CPPFLAGS 和 CXXFLAGS 都是用于指定编译器选项的变量.它们之间的主要区别在于它们分别适用于 C ...

  7. biancheng-linux-shell

    参考http://c.biancheng.net/view/706.html Shell变量:Shell变量的定义.赋值和删除 Shell 支持以下三种定义变量的方式: variable=valuev ...

  8. Mybatis框架详解

    Mybatis框架(1)---Mybatis入门 mybatis入门   MyBatis是什么? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache sof ...

  9. ISA-L库调研

    本文分享自天翼云开发者社区<ISA-L库调研>,作者:何****尔 1.Intel SIMD指令集 SIMD(single instruction multiple data)单指令多数据 ...

  10. Windows&Mac解决端口占用问题

    Windows解决端口占用问题 1.打开命令窗口(以管理员身份运行) 以管理员方式打开cmd 2.查找所有运行的端口 我这里运行了一个项目127.0.0.1:5000,使用的是5000端口,以此来做示 ...