国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、文件上傳

<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("文件大小不能超過(guò)10M");
    return;
  }
  if (file.type !== "video/mp4") {
    alert("文件類型必須是mp4");
    return;
  }
}
function submit() {}
</script>

前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)
可以把File 類型 轉(zhuǎn)換為 Blob 類型,因?yàn)?File 是Blob的子類
前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)

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

前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)

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

前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)

三、FileReader()的使用

Blob是不可修改也是無(wú)法讀取里面的內(nèi)容的。但是Filereader就提供了讀取Blob里面內(nèi)容的方法。

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 讀取完成后執(zhí)行
  fr.onload = () => {
    console.log(fr.result);
  }
}
function submit() {}
</script>

前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)
給圖片顯示一下
前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)
前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)
可以利用切片來(lái)實(shí)現(xiàn)上傳半張圖片的效果
前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)
前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)

2. 也可以做文本預(yù)覽(利用readAsText)方式和上面的步驟差不多。

四、多文件上傳(給input添加multiple 屬性)

前端最常見(jiàn)的就是添加一個(gè)multiple 屬性,這樣在上傳的時(shí)候只要按住Ctrl 就可以選擇多個(gè)文件了,這樣的方式對(duì)用戶不夠友好,因?yàn)橛行┯脩羰遣恢腊醋trl 可以選擇多個(gè)文件的,一般來(lái)說(shuō),用戶只會(huì)一個(gè)文件,一個(gè)文件來(lái)上傳的。
前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)

前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)
用戶不按Ctrl 來(lái)選擇多個(gè)文件,而是一個(gè)一個(gè)文件上傳 就需要我們自己來(lái)收集數(shù)據(jù)了。一般定義一個(gè)數(shù)組來(lái)接收,看下面動(dòng)圖就是符合用戶習(xí)慣的
前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)
前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)

五、文件傳給后端的方式

圖片可以通過(guò)轉(zhuǎn)成Base64 的方式,文件一般使用 formData來(lái)進(jìn)行傳輸,可以說(shuō),formData 就是一個(gè)載體,負(fù)責(zé)裝載文件

前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)

<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([]) //多文件上傳
// 定義全局變量,用來(lái)存儲(chǔ)文件對(duì)象
// 方便后面的submit方法使用
let _fileObj;

function fileChange(e) {
  //多文件上傳
  //結(jié)合 multiple屬性,可以上傳多個(gè)文件,
  //但需要按住ctrl鍵來(lái)選擇多個(gè)文件,不符合用戶習(xí)慣
  let files = e.target.files;
  console.log(files);
  _fileObj = files;
  // 如果用戶使用ctrl鍵選擇多個(gè)文件,需要用concat合并
  if (e.target.files.length > 1) {
    imgList.value.concat(e.target.files)
    //用戶一個(gè)一個(gè)選擇文件,直接push存儲(chǔ)起來(lái),符合用戶習(xí)慣
  } 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--切片上傳實(shí)現(xiàn)
前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)
上面是提交單個(gè)文件的,如果想要提交多個(gè)文件,只需要遍歷即可
把 下面的

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

改成

  //多文件上傳,遍歷數(shù)組,每個(gè)文件都要用FormData包裝一下
   imgList.value.forEach((item) => {
    let _formData = new FormData();
    _formData.append(item.name + 'file', item);
    axios.post('/XXX',_formData)
  })

六、切片上傳具體實(shí)現(xiàn)

<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); //上傳進(jìn)度

// 定義全局變量,用來(lái)存儲(chǔ)文件對(duì)象
// 方便后面的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));
    // 這個(gè)接口只是用來(lái)測(cè)試,只有一個(gè)功能,就是返回一個(gè)‘ok’
    await axios.post('http://localhost:4000/upload', fileData)
    Percentage.value = (current / fileSize * 100)//進(jìn)度條計(jì)算
    current += size;
  }
  Percentage.value=100
}
</script>

前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)
server.js文件用來(lái)模擬文件上傳的,需要引入包:

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);

啟動(dòng)服務(wù)器:

node  server.js 

演示效果
前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-419313.html

到了這里,關(guān)于前端--文件上傳--文件切片--利用FileReader()中的readAsDataURL()做縮略圖--多文件上傳--formData--切片上傳實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • html5提供的FileReader是一種異步文件讀取文件中的數(shù)據(jù)

    前言:FileReader是一種異步文件讀取機(jī)制,結(jié)合input:file可以很方便的讀取本地文件。 input:file 在介紹FileReader之前,先簡(jiǎn)單介紹input的file類型。 input type=\\\"file\\\" id=\\\"file\\\" input的file類型會(huì)渲染為一個(gè)按鈕和一段文字。點(diǎn)擊按鈕可打開(kāi)文件選擇窗口,文字表示對(duì)文件的描述(大部分情

    2024年02月11日
    瀏覽(23)
  • Vue 大文件切片上傳實(shí)現(xiàn)指南包會(huì),含【并發(fā)上傳切片,斷點(diǎn)續(xù)傳,服務(wù)器合并切片,計(jì)算文件MD5,上傳進(jìn)度顯示,秒傳】等功能

    Vue 大文件切片上傳實(shí)現(xiàn)指南包會(huì),含【并發(fā)上傳切片,斷點(diǎn)續(xù)傳,服務(wù)器合并切片,計(jì)算文件MD5,上傳進(jìn)度顯示,秒傳】等功能

    ????????在Web開(kāi)發(fā)中,文件上傳是一個(gè)常見(jiàn)的功能需求,尤其是當(dāng)涉及到大文件上傳時(shí),為了提高上傳的穩(wěn)定性和效率,文件切片上傳技術(shù)便顯得尤為重要。通過(guò)將大文件切分成多個(gè)小塊(切片)進(jìn)行上傳,不僅可以有效減少單次上傳的數(shù)據(jù)量,降低網(wǎng)絡(luò)波動(dòng)對(duì)上傳過(guò)程的

    2024年04月28日
    瀏覽(25)
  • vue實(shí)現(xiàn)大文件上傳(切片上傳)

    vue實(shí)現(xiàn)大文件上傳(切片上傳)

    上傳視頻的時(shí)候,如果視頻體積過(guò)大,一次性上傳就會(huì)出現(xiàn)各種問(wèn)題,或者由于網(wǎng)絡(luò)不佳的原因?qū)е律蟼魇?,這時(shí)候就需要大文件上傳的常見(jiàn)方法,如切片上傳,顧名思義,切片上傳就是將一個(gè)大文件切成一份一份的小文件,再去將每一個(gè)小文件上傳。 首先還是借助iview的

    2024年02月09日
    瀏覽(32)
  • 大文件切片上傳

    創(chuàng)建組件:創(chuàng)建一個(gè)組件用于處理文件上傳,命名為 Upload.vue 。 添加切片邏輯:在 startUpload 方法中,我們需要將選擇的文件切成多個(gè)小塊進(jìn)行上傳??梢允褂?FileReader 進(jìn)行文件切片操作。 3.切片上傳到服務(wù)器:可以使用 axios 庫(kù)進(jìn)行文件上傳操作。 4.添加進(jìn)度條:可以使用

    2024年02月12日
    瀏覽(20)
  • 大文件分割切片上傳

    1,獲取到file文件 2,進(jìn)行文件切割 切割標(biāo)準(zhǔn)以3-10M為基準(zhǔn)單位,獲取可以切割的個(gè)數(shù)進(jìn)行遍歷,使用formData包裝好切割的參數(shù)去請(qǐng)求數(shù)據(jù); 3,遍歷請(qǐng)求分割的接口上傳 每次將分割好的文件給到接口,后端會(huì)將其整合起來(lái) 最終返回回來(lái);

    2024年02月15日
    瀏覽(19)
  • vue+ts大文件切片上傳

    vue+ts大文件切片上傳

    別看文字了,看代碼注釋吧§(* ̄▽ ̄*)§ 1. src 下 的.vue 文件?src/APP.vue 2. src下文件夾,與上方??代碼在同一目錄?src/utils/index.ts 3.效果圖 ? 非常簡(jiǎn)單(。?ω?。)?

    2024年01月23日
    瀏覽(31)
  • vue 大文件視頻切片上傳處理方法

    前端上傳大文件、視頻的時(shí)候會(huì)出現(xiàn)超時(shí)、過(guò)大、很慢等情況,為了解決這一問(wèn)題,跟后端配合做了一個(gè)切片的功能。 我這個(gè)切片功能是基于 minion 的,后端會(huì)把文件放在minion服務(wù)器上。具體看后端怎么做 1、在項(xiàng)目的 util(這個(gè)文件夾是自己創(chuàng)建的,如果項(xiàng)目里沒(méi)有可以自行

    2024年02月13日
    瀏覽(19)
  • Spring Boot + MinIO 實(shí)現(xiàn)文件切片極速上傳技術(shù)

    Spring Boot + MinIO 實(shí)現(xiàn)文件切片極速上傳技術(shù)

    ??歡迎來(lái)到SpringBoot框架學(xué)習(xí)專欄~ ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒?? ?博客主頁(yè):IT·陳寒的博客 ??該系列文章專欄:SpringBoot ??其他專欄:Java學(xué)習(xí)路線 Java面試技巧 Java實(shí)戰(zhàn)項(xiàng)目 AIGC人工智能 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) ??文章作者技術(shù)和水平有限,如果文中出現(xiàn)錯(cuò)誤,希望大家能指

    2024年02月04日
    瀏覽(22)
  • 大文件切片上傳+斷點(diǎn)續(xù)傳解決方案-前后端實(shí)現(xiàn)(附源碼)

    上傳文件大家應(yīng)該都做過(guò),前端直接把file文件傳給后端就ok了,但是大文件這樣傳就會(huì)造成頁(yè)面假死,體驗(yàn)極差。如果遇到網(wǎng)絡(luò)不穩(wěn)定的時(shí)候,中途上傳失敗的話,又要從頭開(kāi)始傳,本來(lái)文件就大,還慢。所以今天我們用一種新方法-切片上傳+斷點(diǎn)續(xù)傳 頁(yè)面上很簡(jiǎn)單,我就放

    2024年02月09日
    瀏覽(32)
  • Vue項(xiàng)目中大文件切片上傳實(shí)現(xiàn)秒傳、斷點(diǎn)續(xù)傳的詳細(xì)實(shí)現(xiàn)教程

    在Vue項(xiàng)目中,大圖片和多數(shù)據(jù)Excel等大文件的上傳是一個(gè)非常常見(jiàn)的需求。然而,由于文件大小較大,上傳速度很慢,傳輸中斷等問(wèn)題也難以避免。因此,為了提高上傳效率和成功率,我們需要使用切片上傳的方式,實(shí)現(xiàn)文件秒傳、斷點(diǎn)續(xù)傳、錯(cuò)誤重試、控制并發(fā)等功能,并

    2024年02月12日
    瀏覽(48)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包