file.raw和file在formdata中上传时遇到的坑!!

这篇具有很好参考价值的文章主要介绍了file.raw和file在formdata中上传时遇到的坑!!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先是这样,我在写一个表单上传页面的时候,结合elementeplus遇到了需要上传图片文件和视频文件的情况,一顿上网猛搜,经过一二十篇博客浏览下来,找到了三四篇可以参考,但是对于到底是上传file还是file.raw说法不一,于是我去查了FormData、file、file.raw、blob的文档,弄清楚了一些他们之间的关系。然后下面开始咔咔上知识点!

先说说formdata、blob、file、file.raw分别都是什么:

1.FormData:

FormData 接口提供了一种表示表单数据的键值对 key/value 的构造方式,并且可以轻松的将数据通过XMLHttpRequest.send() 方法发送出去,本接口和此方法都相当简单直接。如果送出时的编码类型被设为 "multipart/form-data",它会使用和表单一样的格式。

常用方法:

FormData.append()

向 FormData 中添加新的属性值,FormData 对应的属性值存在也不会覆盖原值,而是新增一个值,如果属性不存在则新增一项属性值。

let form = new FormData();
form.append('title',videoForm.title);
form.append('introduction',videoForm.introduction);
form.append('file',formData.videoFile.raw);

其中的字段类型可以是 Blob、File 或者字符串:如果它的字段类型不是 Blob 也不是 File,则会被转换成字符串类。(但这里的file不是直接的file类型,formData 不支持直接将文件对象作为参数传入,需要经过一些转换比如用file.raw或者转换成Blob对象)

这里出现了Blob,这是个什么类型呢?

2.Blob

Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。它经常会用来表示js数据格式的文件,但不一定只能是js文件。

常用方法:

Blob()构造函数。构造函数可以通过其他对象创建 blob。例如,用一个 JSON 字符串构造一个 blob:

const obj = {hello: 'world'};
const blob = new Blob([JSON.stringify(obj, null, 2)], {type : 'application/json'});

3.File

再说到最常见的file类型,其实看完Blob我们就可以发现,file是一种特殊的Blob类型。file接口也继承了blob接口的所有属性,因为它太常见了,用法没有什么特别的,具体的就不细说啦~

api文档放在这儿了

4.file.raw

这个属性其实我是没找到什么官方文档的(有友友找到了欢迎留言评论哦,一起噶油!)

但是零零散散的搜索发现,它是一种二进制文件,可以通过formdata直接上传


所以说,开头那个问题,只要把上传的文件变成Blob或者取file.raw就可以了,bug解决!

用Blob和file.raw两种办法实现文件上传:

let form = new FormData();
form.append('title',videoForm.title);
form.append('introduction',videoForm.introduction);
// 用file.raw上传视频文件
form.append('file',formData.videoFile.raw);
// 用Blob构造函数上传封面文件
if(hasImg){
  const blob=new Blob([formData.imgFile],{type:'png/jpeg/jpg'});
  form.append('thumbnail',blob);
}else{
  form.append('thumbnail',null);
    }    

我当时那个项目需要传一个视频和一张图片,如果一个用的转换为Blob一个用的file.raw,会发现f12的网络那儿都是显示的binary,(传到后端让他们再去处理就行了,我问了我们项目的后端,这两种都是可以正常查看文件的)

file.raw和file在formdata中上传时遇到的坑!!,前端实战经验积累,html,javascript,前端如果视频文件直接传入file,会出现400报错

file.raw和file在formdata中上传时遇到的坑!!,前端实战经验积累,html,javascript,前端文章来源地址https://www.toymoban.com/news/detail-623847.html

到了这里,关于file.raw和file在formdata中上传时遇到的坑!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【git代码上传】小结:idea上传代码到gitee时遇到的坑

    【问题解析】这个错误表明 Git 无法找到指定的远程仓库。导致这个问题的原因可能是你提供的远程仓库地址不正确,或者你没有权限访问这个仓库。 排查顺序与解决方案 确认你的远程仓库地址是否正确。确保这个地址是准确的,仓库存在且可访问。 检查你是否有权限访问

    2024年04月28日
    浏览(20)
  • 前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现

    可以把File 类型 转换为 Blob 类型,因为 File 是Blob的子类 Blob是不可修改也是无法读取里面的内容的。但是Filereader就提供了读取Blob里面内容的方法。 1.做缩略图用readAsDataURL 给图片显示一下 可以利用切片来实现上传半张图片的效果 2. 也可以做文本预览(利用readAsText)方式和上

    2023年04月20日
    浏览(50)
  • 13 使用Vue + FormData + axios实现图片上传功能实战

    前言 上节回顾 上一小节中,我们添加了 Vue-router 的路有数据,这些数据都将是后续实战课程中的真实路由数据了。同时引入了 ElementUI 的 el-menu 做为左侧菜单的组件,但本专栏的特点就是遇到第三方功能和组件,自己尽量也要实现一遍,所以,在文章末尾又自己实现了一个

    2024年02月16日
    浏览(27)
  • 实战:求年月日时间前后遇到的坑和解决方式

    这周接到一个时间转换任务需要处理,本来没什么问题,后来完成后发现时间有偏差,又重写了一遍代码,感觉很有记录必要性,希望看过的小伙伴可以避坑。照例,先说结论。 结果:如果我们使用了错误的工具类Calendar,求出的时间在时分秒中会有偏差,打到几小时,小到十

    2024年02月09日
    浏览(30)
  • flutter3使用dio库发送FormData数据格式时候的坑,和get库冲突解决办法

    问题1:当你使用 FormData.from(Flutter3直接不能用) 的时候,可能会提示没有这个方法,或者使用 FormData.fromMap(flutter3的dio支持) 的时候也提示没有,这时候可能就是和get库里面的Formdata冲突了 问题1:The method \\\'fromMap\\\' isn\\\'t defined for the type \\\'FormData\\\'. (Documentation)  Try correcting the name to

    2024年01月19日
    浏览(32)
  • 使用Docker部署前端项目实战教程,该踩的坑我都帮你踩了!

    每个人的前半生,都在不停地做加法。可到了后半生,我们就要学会不断地做减法。 目录 前置工作 1、需要准备的东西 2、连接云服务器 安装Docker环境  1、安装Docker的依赖库。 2、添加Docker CE的软件源信息。  3、安装Docker CE。 4、启动Docker服务。 准备Dockerfile并部署项目(构

    2023年04月08日
    浏览(37)
  • 前端将file文件传给后台,后台将文件传给前台(包含上传下载)

    在开发过程中,经常会遇见对文件的处理。 例如:在上传、下载文件时,需要在前端选完文件传到后台传到服务器;或者文件从后台,经过特定需求的处理在返回给前台。 中间处理过程各种各样,但有两个过程是固定的 前端传给后台 后台返回给前端 经常用到的上传就是对

    2024年02月11日
    浏览(37)
  • 利用FormData上传本地文件

    最近接了个小项目,有个用客户端本地文件的需求。 正常这种需求都是前台传文件,后台去解析。 但这次C++的老哥非让我给文件路径,说公司平台有解析文件的能力。 我说web不是桌面端,拿不到真实路径,他还不信😪 最后一顿‘掰头’,还是传文件 本来还是想用element-p

    2024年02月01日
    浏览(20)
  • layui框架实战案例(21):layui上传的哪些事(layui.upload组件、 file文件域、php后台上传)

    在网速一般的情况下,大文件的上传通常需要一定时间的等待,而浏览器并不会醒目地告知你它正在努力地上传中,此时为了提升用户体验,我们可以通过该回调制作一个进度条。注: 该回调为 layui 2.5.5 新增 编辑时,读取数据库自动进行预览; 上传时,通过下面JQ代码进行

    2024年01月16日
    浏览(47)
  • 前端文件上传,后端SpringMVC出现Required part ‘file‘ is not present错误解决

            本人新手一枚,因为该错误在网上找了许多解决方法都不能解决自己出现的问题,浪费了很多时间,因此记录自己解决该问题的过程,希望能够帮助出现该错误的朋友。         先说明本人的框架使用,因为网上有许多解决办法,都有不同的框架,因此该方法可

    2024年04月24日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包