formData上传多文件,并用Blob将数据生成文件。

掌握JavaScript FormData:文件上传的终极指南 前端开发中,文件上传是一个常见但常让人头疼的需求。幸运的是,现代JavaScript提供了一个强大的工具——FormData对象,让文件上传变得简单高效。本文将带你深入探索FormData的强大功能!FormData是JavaScript中的一个API,专门用于构建表单数据,特别适合处理文件上传和AJAX请求。它能够将数据编码为multipart/form-data格式,这是HTTP中上传文件的标准格式。创建一个FormData对象非常简单: append()方法允许你添加各种类型的数据,包括字符串、Blo 阅读详情

前端上传多个文件解析文件数据后将数据一起返回,用Blob前端生成文件

项目需求:文件合并,上传多个文件,解析后返回数据,在前端生成文件。

HTML:

	<ul>
       <li class="input-title" :class="index==0?'font-weight-900':''">{{item.title}}</li>
       <li>
         <div class="input-parent">
           <input @change="showUploadChange(index)" ref="uploadInput" class="hidden-input" :multiple="index == 0?true:false" type="file">
           <input ref="showUploadInput" v-model="item.show_input_value" class="show-input" type="text">
         </div>
         <span @click="uploadSubmit(index,item.url)" class="download-btn">确定</span>
       </li>
    </ul>

上传多个文件主要是依靠input的 multiple 属性,将multiple设置为true就可以上传多文件。

JS:

	 uploadSubmit(index,url){
	 	//refs获取文件
        let file = this.$refs.uploadInput[index].files
        let formData = new FormData();
        let _this = this;
        if(this.data_list[index].show_input_value!==""){
        for(let i=0;i<file.length;i++){
        //将要提交的文件放到formData中
              formData.append("file",file[i]);
          }
        let settings = {
          url: this.baseUrl + url,
          method: "POST",
          processData: false,//这里要改成false,否则会出错。
          mimeType: "multipart/form-data",
          contentType: false,//这里要改成false,否则会出错。
          data: formData
        };


        $.ajax(settings).done(function(response) {
          let res = JSON.parse(response);
          if(res.code == 1){
            let data = res.data;
            //创建Blob
            let url = window.URL.createObjectURL(new Blob([data]))
            // 创建a标签
            let a = document.createElement('a')
            //修改下载文件的名称
            a.download =res.name + "." + res.type;
            a.style.display = 'none'
            a.href = url
            document.body.appendChild(a)
            a.click();
            a.remove();
          }else{
            alert(res.msg);
          }

        });
      }else{
        alert("请选择文件!")
      }
      },

Java:

	 @RequestMapping("/url")
    public JSONObject mergedDocument(HttpServletResponse response, HttpServletRequest request, @RequestParam("file") MultipartFile[] file){
        JSONObject result = new JSONObject();
        String str = "";//保存文件数据
        String name = "";//文件名称
        String type = "";//文件类型(TXT,SQL,Excel)
        try {
            for(MultipartFile f:file){
            
                Map<String,String> map = analysisSqlRepository.resultCode(f);//这里用来判断文件编码格式,防止出现乱码,有需要的可以看我的另一篇博文。
                name = f.getOriginalFilename().split("\\.")[0];
                type = f.getOriginalFilename().split("\\.")[1];

                String code = map.get("encoding");
                //输入流
                InputStream in = f.getInputStream();
                BufferedReader reader = null;

                if(code != null){
                    reader = new BufferedReader(new InputStreamReader(in,code));
                }else{
                    reader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
                }
                String line;
				//按行读取文件数据
                while ((line = reader.readLine()) != null){
                    str += line +"\r\n";
                }
                //关闭输入流
                in.close();

            }
            //返回数据
            result.put("code","1");
            result.put("data",str);
            result.put("name",name);
            result.put("type",type);
            result.put("msg","sucess!");
        }catch (Exception e){
            result.put("msg", "失败");
            if (e instanceof MyException) {
                result.put("msg", e.getMessage());
            }
            result.put("code", 0);
        }

        return result;
    }

敲完收工。

js blob 文件上传 js blob 上传 阅读详情

相关推荐

PCB设计之ODB++文件格式详解

ODB++(Open Database++)是一种广泛应用于PCB(印制电路板)设计和制造领域的开放数据交换格式。它由Valor Computerized Systems(现为Siemens EDA的一部分)开发,旨在替代传统的Gerber文件格式,提供更完整、结构化的制造数据,从而优化PCB设计到生产的流程。ODB++通过结构化数据整合了PCB设计到制造的全流程信息,显著提高了生产效率和准确性。尽管存在一定的兼容性挑战,但其在复杂项目和高可靠性场景中的价值不可替代。

ZZcppc的博客 1万+

【我不熟悉的javascript】文件上传base64、blob、file和formdata,

js基础知识

有一棵树的博客 1945

hcaptcha-challenger:基于本地AI模型自动破解验证码的工程实践

验证码作为区分人类与机器的经典安全机制,其核心原理是通过图像识别、行为分析等交互式挑战来阻挡自动化程序。传统绕过方法依赖第三方打码平台或脚本,存在成本高、稳定性差的问题。随着多模态大语言模型和计算机视觉技术的发展,本地化AI求解成为新的技术方向,它通过集成YOLO、ResNet等模型,在本地完成图像语义理解,实现了高隐私、低成本、可进化的验证码自动化解决方案。这种范式尤其适用于需要大规模稳定处理网页交互的场景,如电商数据采集和社交媒体管理。hcaptcha-challenger项目正是这一理念的工程实践,它

weixin_42587866的博客 1028

js 图片上传传给后台的几种格式,formData,base64,file,blob流

1. file格式 创建formData来完成file上传 <input type="file" id="imgfile" name="pic" multiple> <script> $("#imgfile").change(function () { var formData = new FormData(); $.each($('...

Baby_加油_的博客 1万+

TwinCAT3 实时核异步通信:基于ADS的C++ Server/Client数据交换实战解析

本文深入解析了在TwinCAT3实时核中,如何利用ADS协议实现C++ Server与Client之间的异步数据交换。文章从核心概念入手,详细阐述了实时核、ADS通信及异步机制,并通过实战步骤指导环境搭建、路由配置、Server端服务创建与Client端请求发起,重点剖析了Req/Ind/Res/Con异步回调模型,旨在帮助开发者构建高效、非阻塞的实时工业控制应用。

purple的博客 469

ComfyUI 的 LoRA 训练:素材打标签与调优全攻略

标签是 LoRA 训练的"地基"——地基打不牢,后续调参再精细也难出好效果。记住:标签要"少而精",聚焦独特点,用触发词控效果。下一篇我们将讲解参数设置,让你的优质标签发挥最大价值~

2301_78150483的博客 3099

一文带你吃透前端文件上传与文件相关操作

主要实现功能:单/多文件上传,分片上传,断点续传,二进制blob传输 使用formData传输base64 把文件转为base64传输file类实际上继承于Blob类,可以使用Blob的方法。

qq_60726492的博客 1156

Habitat-v0.1.7安装全网最详细教程(解决habitat-sim下载时网络问题)

Habitat-v0.1.7安装全网最详细教程(解决habitat-sim下载时网络问题)

shannanshouyin的博客 1328

文件上传总结:用原生解决前端文件上传操作(单个,多个,大文件切片)

学会用原生解决前端文件上传操作(单个,多个,大文件切片)

qq_45796592的博客 3807

告别编译噩梦:Vcpkg+Cmake一站式集成Tesseract-OCR C++开发环境(Windows)

本文详细介绍了如何在Windows系统上使用Vcpkg和CMake快速集成Tesseract-OCR C++开发环境,解决传统编译过程中的依赖问题。通过一键安装和自动化配置,开发者可以高效搭建OCR识别系统,支持中英文识别,并提供了常见问题的解决方案和进阶技巧。

weixin_29009339的博客 231

诊断数据库ODX标准协议ISO22901定义组成部分

综上所述,简略描述了ODX数据库中UML/XML/Text/Check rules具体功能以及详细内容。

Soly_kun的博客 907

js-用于上传的FormData与Blob

BLOB BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。 BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。 构造方法 script> var blob = new

火星男孩的分享空间 3万+

19、英国模式:银行体系的演变与现代金融架构

本文深入探讨了英国银行体系从专业化向全能银行的演变过程,分析了自律监管模式的优劣,并解析了围栏制度对金融稳定的影响。同时,文章还介绍了信用合作社、建筑协会和投资银行的角色与转型,全面展示了英国金融体系的多样性与复杂性,以及其在全球金融市场中的重要作用。

embedding5hiker的博客 105

vue的单文件上传与多文件上传与blob

如果是单文件的话,我们只需要将要发送的文件放到我们所创建的formdata数组中,这里this.fileList[0].raw就是我的文件,这里一定要注意加上raw才是真实文件数据,否则会报500错误。//response.data为后端传的流文件。如果是多文件上传,我们就要遍历一下filelist数组中所存放的文件数量,然后再去发送。补充,在向后端传递文件时,经常需要我们前端将文件进行一个数据处理,这时候输入以下代码。在文件上传的操作中,我们首先要定义一个formdata数组去存放要向后端发送的数据。

m0_59434771的博客 2772

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现

前端最常见的就是添加一个multiple 属性,这样在上传的时候只要按住Ctrl 就可以选择多个文件了,这样的方式对用户不够友好,因为有些用户是不知道按住Ctrl 可以选择多个文件的,一般来说,用户只会一个文件,一个文件来上传的。图片可以通过转成Base64 的方式,文件一般使用 formData来进行传输,可以说,formData 就是一个载体,负责装载文件。//用户一个一个选择文件,直接push存储起来,符合用户习惯。//结合 multiple属性,可以上传多个文件,"文件大小不能超过10M"

墨苒孤的博客 3130

计算机控制技术及应用

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

【文件上传】blob、file、formdata区别

blob是原始的也是用的最多的;file是input拿到的时候这个格式,从blob继承而来;base64类似于string那种,可以传输方便直接用于图像展示,而blob是原始的。

lx233 2723

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Vue2】Vant2上传文件使用formData方式,base64图片转Blob再转File上传

vant2上传组件,用formData格式上传文件到后台,vue2语言,vant2组件库

qq_51055690的博客 4296

vue文件上传和下载,excel上传和下载,vue使用FormData上传excel文件,使用blob下载文件

一、excel文件上传 1、html代码: <el-button size="mini" :plain="true" class="file-box" type="button"> 导入 <input id="up" ref="file" type="file" class="file-btn" @change="inputCustomProd...

Two_Too的专栏 2811

JavaScript base64位文件转Blob类型,FormData上传二进制文件

base64位文件转Blob类型,FormData上传二进制文件 文件类型的转换 //将base64转换为blob dataURLtoBlob: function(dataurl) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Ar

1004 1815

【前端】-【前端文件操作与文件上传】-【前端接受后端传输文件指南】

/ 进度条可以用axios的onUploadProgress方法,且发送切片时可以并行发送请求,后续可以自行优化。// 将切割后的Blob对象转成File对象(第二个参数是文件名),之后就可以上传切割后的File对象。// multiple的多文件上传其实很不友好,需要用户在选择文件时按住ctrl多选,否则就会变成单选。// 直接将转换结果赋值给img的src,设置src的大小即可获得浓缩图。//切片上传,在上传的时候进行切片,文件改变时只赋值。// 使用blob的slice方法可以切割文件。

CaraYQ的博客 1万+

php formdata blob,基于formdata与blob的文件上传与下载

首先介绍一下用到的基本知识formdataMDN上的定义:FormData 接口提供了一种表示表单数据的键值对的构造方式,经过它的数据可以使用 XMLHttpRequest.send() 方法送出。简单说就是用来构造http请求的参数(可以携带文件数据)。常用方法:FormData(form)构造函数,参数可选,为一个form对象Dom,会包含进该form的值FormData.append(key...

weixin_31938727的博客 679

移动端ionic App 多文件上传问题

第一篇博客,多多指教。 以实际项目为例,这是一个混合开发的App,功能很简单:拍照、录视频,填写表单,上传,查询。但是这里面也有坑在,就是我要说的-多文件的上传问题。 首先File Transfer 插件,可以download、upload 文件,上传单文件是没有问题,也就是说上传头像的功能可以用,但是多文件就派不上用场了。

NaAlone的博客 2128

文件上传---FormData格式的传参

​一般前端做 文件导入功能 / 上传功能 的时候会用到Formdata的格式,来上传文件和数据。 会比较常用的两种方式: 1. 直接表单传值 可以使用FormData.append来添加键/值对到表单里面; 2. 后端的多部分传参 和后端接口保持统一,那么可能不全是表单格式的数据,可能设置的不同的格式,比如文件格式的文件和数据格式的数值,因此需要带格式传过去(new Blob方法)。 ​

Realizee的博客 8716

js base64转可用formdata上传的文件

js base64转可用formdata上传的文件 convertBase64UrlToBlob(urlData,type){/*将base64转换成可用formdata提交的文件,urlData base64的url,type 0图片 1视频 */ var bytes=window.atob(urlData.split(',')[1]); //去掉url的头,并转换为byt...

u010826341的博客 5146

Vue Excel文件的下载和上传(formData)

Vue Excel文件的下载和上传(formData) 在本文中传给后台的数据为FormData,首先介绍Excel文件的上传和下载代码。 HTML代码,其中引用了Element-UI的button <el-button type="success" @click="download" >表格下载</el-button> <input style="display:n...

Tessa_zzl的博客 5004
上一篇: java判断文本文件编码格式juniversalchardet使用
下一篇: 'express' 不是内部或外部命令,也不是可运行的程序或批处理文件,问题解决。
Hello_Tree__
博客等级 码龄8年 3粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值