formdata

读Zepto源码之Form模块

£可爱£侵袭症+ 提交于 2020-04-13 08:03:20
Form 模块处理的是表单提交。表单提交包含两部分,一部分是格式化表单数据,另一部分是触发 submit 事件,提交表单。 读 Zepto 源码系列文章已经放到了github上,欢迎star: reading-zepto 源码版本 本文阅读的源码为 zepto1.2.0 GitBook 《 reading-zepto 》 .serializeArray() $.fn.serializeArray = function() { var name, type, result = [], add = function(value) { if (value.forEach) return value.forEach(add) result.push({ name: name, value: value }) } if (this[0]) $.each(this[0].elements, function(_, field){ type = field.type, name = field.name if (name && field.nodeName.toLowerCase() != 'fieldset' && !field.disabled && type != 'submit' && type != 'reset' && type != 'button' && type !=

angularjs用FormData上传文件

余生颓废 提交于 2020-04-09 04:47:34
这个问题,搜索到一篇博文 http://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs 可能版本不同,1.4.5版本Content-Type设置为undefined时,取的是默认的ContentType 查看源码,原来可以设置一个函数来返回 ContentType,当函数返回值为 undefined时,浏览器会自己加上正确的 ContentType this.uploadBinaryFile = function (files, field) { var defered = $q.defer(); var formData = new FormData(); if (angular.isArray(files)) { angular.forEach(files, function (file) { formData.append(field || "file", file); }); } else { formData.append(field || "file", files); } $http({ url: "/upload", method: "POST", data: formData, transformRequest: angular.identity, headers: {

Django之Ajax传输数据

久未见 提交于 2020-04-03 02:51:33
MTV与MVC模型 MTV与MVC都是模型,只不过MTV是django自己定义的,具体看一下他们的意思 MTV模型(django) M:模型层(models.py) T:templates文件夹 V:视图层(views) MVC模型 M:模型层 V:视图层(views.py) C:控制器(Controller) urls.py 总结:本质上django的MTV也是MVC 前后端传输数据编码格式 首先,在我们不指定传输数据的时候,默认的contentType都是urlencoded urlencoded   对应的数据格式: name=jason&password=555   后端获取数据: request.POST      PS:django会将urlencded编码的数据解析自动放到request.POST formdata   form表单传输文件的编码格式   后端获取文件格式数据: request.FILES   后端获取普通键值对数据: request.POST application/json    form表单不支持,Ajax支持   Ajax发送json格式数据   需要注意的点     编码与数据格式要一致 Ajax(重点掌握) Ajax支持异步提交数据,局部刷新页面,这种情况我们在好多页面都会看到,那我们要如何做到呢?先来学习Ajax的基础语法~~

原生js封装ajax:传json,str,excel文件上传表单提交

ぐ巨炮叔叔 提交于 2020-03-30 20:53:32
由于项目中需要在提交ajax前设置header信息,jquery的ajax实现不了,我们自己封装几个常用的ajax方法。 jQuery的ajax普通封装 var ajaxFn = function(uri, data, cb) { $.ajax({ url: uri, type: 'POST', dataType: 'json', data: data, }) .done(cb) .fail(function() { console.log("error"); }) .always(function() { console.log("complete"); }); } 原生ajax封装,设置header,传json 1 var ajaxHdFn = function(uri, data, cb) { 2 var getXmlHttpRequest = function() { 3 if (window.XMLHttpRequest) { 4 //主流浏览器提供了XMLHttpRequest对象 5 return new XMLHttpRequest(); 6 } else if (window.ActiveXObject) { 7 //低版本的IE浏览器没有提供XMLHttpRequest对象 8 //所以必须使用IE浏览器的特定实现ActiveXObject 9 return

4GB以上超大文件上传和断点续传服务器的源码

不羁岁月 提交于 2020-03-30 16:23:09
最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表格数据、上传影音文件等。如果文件体积比较大,或者网络条件不好时,上传的时间会比较长(要传输更多的报文,丢包重传的概率也更大),用户不能刷新页面,只能耐心等待请求完成。 下面从文件上传方式入手,整理大文件上传的思路,并给出了相关实例代码,由于PHP内置了比较方便的文件拆分和拼接方法,因此服务端代码使用PHP进行示例编写。 本文相关示例代码位于github上,主要参考 聊聊大文件上传 大文件切割上传 文件上传的几种方式 首先我们来看看文件上传的几种方式。 普通表单上传 使用PHP来展示常规的表单上传是一个不错的选择。首先构建文件上传的表单,并指定表单的提交内容类型为enctype="multipart/form-data",表明表单需要上传二进制数据。 然后编写index.php上传文件接收代码,使用move_uploaded_file方法即可(php大法好…) form表单上传大文件时,很容易遇见服务器超时的问题。通过xhr,前端也可以进行异步上传文件的操作,一般由两个思路。 文件编码上传 第一个思路是将文件进行编码,然后在服务端进行解码,之前写过一篇在前端实现图片压缩上传的博客

js 定时器

不问归期 提交于 2020-03-30 00:35:30
var i=0; var int=self.setInterval(function(){ console.log(i++); change_img(); },20); clearInterval(int); //停止定时器 javascript中防止重复点击、防止点击过快实用方法 转自i https://blog.csdn.net/jiangwei1994/article/details/80774214 var isclick = true; function post_test() { if (isclick) { isclick = false; //--- var posturl = "/Home/P_Getcode"; var formData = new FormData(); myxhr.mypost(posturl, 'json', formData, callback_1); //--- setTimeout(function () { isclick = true; }, 500); } } 来源: https://www.cnblogs.com/enych/p/11477329.html

搞定Multipart

安稳与你 提交于 2020-03-23 13:33:59
搞定Multipart Multipart解决了在一个HTTP请求里存放多种数据的问题,使得在一个HTTP请求里同时传输JSON和二进制数据成为可能,因此multipart大量应用在表单中。本文尝试用最简单的方式讲解在AJAX时代的multipart实践。 HTTP请求 Multipart有几个重要的点: 请求的Content-Type必须为multipart/form-data,后面必须跟用于区分各个part的boundary 每个part以boundary开始,后面跟Content-Disposition:form-data以及part的name,以及可选的filename 每个part有可选的Content-Type 前端 前端可以使用FormData来表示multipart var formData = new FormData(); formData.append("username", "Groucho"); formData.append("accountnum", 123456); // number 123456 is immediately converted to a string "123456" // HTML file input, chosen by user formData.append("userfile", fileInputElement

图片采用base64压缩,可以以字符串的形式传送base64给服务端转存为图片

杀马特。学长 韩版系。学妹 提交于 2020-03-22 15:52:09
(function () { var coverImage = document.querySelector('<div id="coverImage">file</div>'); //图片压缩 coverImage.onchange = function () { lrz(this.files[0], {width: 640}, function (results) { // 你需要的数据都在这里,可以以字符串的形式传送base64给服务端转存为图片。 var base64 = results.base64; function base64UrlToBlob(base64){ var bytes=window.atob(base64.split(',')[1]); //去掉url的头,并转换为byte //处理异常,将ascii码小于0的转换为大于0 var ab = new ArrayBuffer(bytes.length); var ia = new Uint8Array(ab); for (var i = 0; i < bytes.length; i++) { ia[i] = bytes.charCodeAt(i); } return new Blob( [ab] , {type : 'image/jpg'}); //return Blob对象 } var formData

vue中图片批量上传

坚强是说给别人听的谎言 提交于 2020-03-22 15:31:30
首先说一下会用到几个知识点 1. event.target.files[0] 获取的是上传的图片的一些参数如下图: 可以自己依次打印看看 console.log(event, event.target, event.target.files, event.target.files[0]) 2. HTML5中FileReader 在FileReader出现之前,前端的图片预览是这样实现的: 把本地图片上传到服务器,服务器把图片地址返回,并把它替换到图片元素的src属性。 这种方法的缺点是: 必须要先把图片上传到服务器。如果上传的图片很大,而网速又很慢,这就需要等待很久预览图片才会显示出来了,如果用户预览图片后发现不太满意,想重新选择一张图片,这时候还要把已经上传到服务器上的图片给删除掉。 有了HTML5的FileReader对象以后,预览图片变得简单多了,不再需要后台的配合,这种方法的思路是: 通过FileReader.prototype.readAsDataURL() 方法把图片文件转成base64编码,然后把base64编码替换到预览图片的src属性即可。 let that = this; let file = event.target.files[0]; let reader = new FileReader(); // 调用reader.readAsDataURL()方法

前台页面上传data image图片,java后台接收图片保存

泄露秘密 提交于 2020-03-18 22:10:18
最近在项目中有这么一个需求,就是上传一个视频文件,然后要获取视频文件的第一帧图片,这个可以通过canvas获取得到,得到的是一个dataURL,之后还要将这个图片上传到云,这个时候如何操作就不清楚了,于是乎,google一番,总结如下: 将dataURL转成Blob 利用formData 异步上传 function b64toBlob(b64Data, contentType='', sliceSize=512) { const byteCharacters = atob(b64Data); const byteArrays = []; for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) { const slice = byteCharacters.slice(offset, offset + sliceSize); const byteNumbers = new Array(slice.length); for (let i = 0; i < slice.length; i++) { byteNumbers[i] = slice.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); byteArrays.push