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

这篇具有很好参考价值的文章主要介绍了前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、文件上传

<template>
  <div>
    <input type="file" name="file" @change="fileChange" />
    <button @click="submit">提交</button>
  </div>
</template>

<script setup>

function fileChange(e) {
  // e.target.files[0]表示获取到索引为0的文件
  let file = e.target.files[0];
  console.log(file);
  if (file.size > 1024 * 1024 * 10) {
    alert("文件大小不能超过10M");
    return;
  }
  if (file.type !== "video/mp4") {
    alert("文件类型必须是mp4");
    return;
  }
}
function submit() {}
</script>

前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现
可以把File 类型 转换为 Blob 类型,因为 File 是Blob的子类
前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现

console.log(new Blob([file]));

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

二、文件切片(利用Blob中的slice()方法 )

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

三、FileReader()的使用

Blob是不可修改也是无法读取里面的内容的。但是Filereader就提供了读取Blob里面内容的方法。

1.做缩略图用readAsDataURL

<template>
  <div>
    <input type="file" name="file" @change="fileChange" />
    <button @click="submit">提交</button>
  </div>
</template>

<script setup>

function fileChange(e) {
  // e.target.files[0]表示获取到索引为0的文件
  let file = e.target.files[0];
  let fr = new FileReader();
  // 做缩略图用readAsDataURL
  fr.readAsDataURL(file);
  //fr 读取完成后执行
  fr.onload = () => {
    console.log(fr.result);
  }
}
function submit() {}
</script>

前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现
给图片显示一下
前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现
前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现
可以利用切片来实现上传半张图片的效果
前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现
前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现

2. 也可以做文本预览(利用readAsText)方式和上面的步骤差不多。

四、多文件上传(给input添加multiple 属性)

前端最常见的就是添加一个multiple 属性,这样在上传的时候只要按住Ctrl 就可以选择多个文件了,这样的方式对用户不够友好,因为有些用户是不知道按住Ctrl 可以选择多个文件的,一般来说,用户只会一个文件,一个文件来上传的。
前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现

前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现
用户不按Ctrl 来选择多个文件,而是一个一个文件上传 就需要我们自己来收集数据了。一般定义一个数组来接收,看下面动图就是符合用户习惯的
前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现
前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现

五、文件传给后端的方式

图片可以通过转成Base64 的方式,文件一般使用 formData来进行传输,可以说,formData 就是一个载体,负责装载文件

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

<template>
  <div>
    <input type="file" name="file" @change="fileChange" multiple/>
    <button @click="submit">提交</button>
    <div v-for="item in imgList" >{{ item.name }}</div>
  </div>
</template>

<script setup>
import axios from 'axios'
import { ref } from 'vue'

const imgbase64 = ref('');
const imgList = ref([]) //多文件上传
// 定义全局变量,用来存储文件对象
// 方便后面的submit方法使用
let _fileObj;

function fileChange(e) {
  //多文件上传
  //结合 multiple属性,可以上传多个文件,
  //但需要按住ctrl键来选择多个文件,不符合用户习惯
  let files = e.target.files;
  console.log(files);
  _fileObj = files;
  // 如果用户使用ctrl键选择多个文件,需要用concat合并
  if (e.target.files.length > 1) {
    imgList.value.concat(e.target.files)
    //用户一个一个选择文件,直接push存储起来,符合用户习惯
  } else {
    imgList.value.push(e.target.files[0])
  }

}
function submit() {
  // 文件要传递给后端的话,必须需要用FormData。
  // 图片可以直接用base64传递
  let _formData = new FormData();
  _formData.append('user', '张三');
  _formData.append('file', _fileObj);
  axios.post('/XXX',_formData)
}
</script>

前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现
前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现
上面是提交单个文件的,如果想要提交多个文件,只需要遍历即可
把 下面的

 let _formData = new FormData();
  _formData.append('user', '张三');
  _formData.append('file', _fileObj);
  axios.post('/XXX', _formData)

改成

  //多文件上传,遍历数组,每个文件都要用FormData包装一下
   imgList.value.forEach((item) => {
    let _formData = new FormData();
    _formData.append(item.name + 'file', item);
    axios.post('/XXX',_formData)
  })

六、切片上传具体实现

<template>
  <div>
    <input type="file" name="file" @change="fileChange" multiple />
    <div>{{ Percentage }}%</div>
    <button @click="submit">提交</button>
    <div v-for="item in imgList">{{ item.name }}</div>
  </div>
</template>

<script setup>
import axios from "axios";
import { ref } from "vue";

const imgbase64 = ref("");
const imgList = ref([]); //多文件上传
const Percentage = ref(0); //上传进度

// 定义全局变量,用来存储文件对象
// 方便后面的submit方法使用
let _fileObj;

function fileChange(e) {
  // 切片上传
  _fileObj = e.target.files[0];
}

async function submit() {
  let size = 2 * 1024 * 1024; //每片2M
  let fileSize = _fileObj.size;
  let current = 0;
  while (current < fileSize) {
    let _formData = new FormData();
    let fileData =  _formData.append(_fileObj.name, _fileObj.slice(current, current + size));
    // 这个接口只是用来测试,只有一个功能,就是返回一个‘ok’
    await axios.post('http://localhost:4000/upload', fileData)
    Percentage.value = (current / fileSize * 100)//进度条计算
    current += size;
  }
  Percentage.value=100
}
</script>

前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现
server.js文件用来模拟文件上传的,需要引入包:

npm i koa koa-cors koa-router
const Koa = require('koa');
const cors = require('koa-cors');
const koarouter = require('koa-router');
const router = new koarouter();
const app = new Koa();
app.use(cors());

router.post('/upload', async (ctx, next) => {
  ctx.body ='ok'
})

router.post('/upload', async (ctx, next) => {
  ctx.body ='ok'
})

app.use(router.routes());
app.listen(4000);

启动服务器:

node  server.js 

演示效果
前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现文章来源地址https://www.toymoban.com/news/detail-419313.html

到了这里,关于前端--文件上传--文件切片--利用FileReader()中的readAsDataURL()做缩略图--多文件上传--formData--切片上传实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • html5提供的FileReader是一种异步文件读取文件中的数据

    前言:FileReader是一种异步文件读取机制,结合input:file可以很方便的读取本地文件。 input:file 在介绍FileReader之前,先简单介绍input的file类型。 input type=\\\"file\\\" id=\\\"file\\\" input的file类型会渲染为一个按钮和一段文字。点击按钮可打开文件选择窗口,文字表示对文件的描述(大部分情

    2024年02月11日
    浏览(42)
  • Vue 大文件切片上传实现指南包会,含【并发上传切片,断点续传,服务器合并切片,计算文件MD5,上传进度显示,秒传】等功能

            在Web开发中,文件上传是一个常见的功能需求,尤其是当涉及到大文件上传时,为了提高上传的稳定性和效率,文件切片上传技术便显得尤为重要。通过将大文件切分成多个小块(切片)进行上传,不仅可以有效减少单次上传的数据量,降低网络波动对上传过程的

    2024年04月28日
    浏览(41)
  • vue实现大文件上传(切片上传)

    上传视频的时候,如果视频体积过大,一次性上传就会出现各种问题,或者由于网络不佳的原因导致上传失败,这时候就需要大文件上传的常见方法,如切片上传,顾名思义,切片上传就是将一个大文件切成一份一份的小文件,再去将每一个小文件上传。 首先还是借助iview的

    2024年02月09日
    浏览(39)
  • 大文件切片上传

    创建组件:创建一个组件用于处理文件上传,命名为 Upload.vue 。 添加切片逻辑:在 startUpload 方法中,我们需要将选择的文件切成多个小块进行上传。可以使用 FileReader 进行文件切片操作。 3.切片上传到服务器:可以使用 axios 库进行文件上传操作。 4.添加进度条:可以使用

    2024年02月12日
    浏览(38)
  • 大文件分割切片上传

    1,获取到file文件 2,进行文件切割 切割标准以3-10M为基准单位,获取可以切割的个数进行遍历,使用formData包装好切割的参数去请求数据; 3,遍历请求分割的接口上传 每次将分割好的文件给到接口,后端会将其整合起来 最终返回回来;

    2024年02月15日
    浏览(29)
  • vue+ts大文件切片上传

    别看文字了,看代码注释吧§(* ̄▽ ̄*)§ 1. src 下 的.vue 文件 src/APP.vue 2. src下文件夹,与上方👆代码在同一目录 src/utils/index.ts 3.效果图   非常简单(。・ω・。) 

    2024年01月23日
    浏览(35)
  • vue 大文件视频切片上传处理方法

    前端上传大文件、视频的时候会出现超时、过大、很慢等情况,为了解决这一问题,跟后端配合做了一个切片的功能。 我这个切片功能是基于 minion 的,后端会把文件放在minion服务器上。具体看后端怎么做 1、在项目的 util(这个文件夹是自己创建的,如果项目里没有可以自行

    2024年02月13日
    浏览(47)
  • Spring Boot + MinIO 实现文件切片极速上传技术

    🎉欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:SpringBoot 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指

    2024年02月04日
    浏览(51)
  • 大文件切片上传+断点续传解决方案-前后端实现(附源码)

    上传文件大家应该都做过,前端直接把file文件传给后端就ok了,但是大文件这样传就会造成页面假死,体验极差。如果遇到网络不稳定的时候,中途上传失败的话,又要从头开始传,本来文件就大,还慢。所以今天我们用一种新方法-切片上传+断点续传 页面上很简单,我就放

    2024年02月09日
    浏览(39)
  • Vue项目中大文件切片上传实现秒传、断点续传的详细实现教程

    在Vue项目中,大图片和多数据Excel等大文件的上传是一个非常常见的需求。然而,由于文件大小较大,上传速度很慢,传输中断等问题也难以避免。因此,为了提高上传效率和成功率,我们需要使用切片上传的方式,实现文件秒传、断点续传、错误重试、控制并发等功能,并

    2024年02月12日
    浏览(61)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包