react將文件轉(zhuǎn)為base64上傳的示例代碼
需求
將圖片、pdf、word、excel等文件進(jìn)行上傳。圖片、pdf等調(diào)接口A、word、excel等附件調(diào)接口B。接口關(guān)于文件是base64格式的參數(shù)
業(yè)務(wù)場(chǎng)景
上傳資源,區(qū)分影像與附件
邏輯思路
- 使用原生input標(biāo)簽,type='file',進(jìn)行上傳
- 上傳后的回調(diào),對(duì)文件進(jìn)行分類,影像與附件
- 對(duì)文件進(jìn)行base64編碼
- 執(zhí)行接口進(jìn)行上傳
代碼實(shí)現(xiàn)
點(diǎn)擊input進(jìn)行上傳,選擇文件后執(zhí)行onChange回調(diào)
<input type="file" multiple ref={uploadInputRef} onChange={uploadFileOnChange} />
對(duì)文件進(jìn)行分類,我這里是通過(guò)type去判斷的
export const uploadFileOnChange = async (e: ChangeEvent<HTMLInputElement>) => { ? const files = e.target.files; ? // 將影像以及附件分類 ? const images: File[] = []; ? const attachments: File[] = []; ? for (const iterator of files ?? []) { ? ? if ( ? ? ? iterator.type.includes('sheet') || ? ? ? iterator.type.includes('excel') || ? ? ? iterator.type.includes('csv') || ? ? ? iterator.type.includes('word') ? ? ) { ? ? ? attachments.push(iterator); ? ? } else { ? ? ? images.push(iterator); ? ? } ? } };
對(duì)文件進(jìn)行base64編碼
async function readFileAsDataURL(file: Blob) { ? const result_base64 = await new Promise<string>((resolve) => { ? ? const fileReader = new FileReader(); ? ? fileReader.readAsDataURL(file); ? ? fileReader.onload = () => ? ? ? typeof fileReader.result === 'string' && resolve(fileReader.result); ? }); ? return result_base64.split('base64,')[1]; } export const uploadFileOnChange = async (e: ChangeEvent<HTMLInputElement>) => { ? const files = e.target.files; ? // 將影像以及附件分類 ? const images: File[] = []; ? const attachments: File[] = []; ? for (const iterator of files ?? []) { ? ? if ( ? ? ? iterator.type.includes('sheet') || ? ? ? iterator.type.includes('excel') || ? ? ? iterator.type.includes('csv') || ? ? ? iterator.type.includes('word') ? ? ) { ? ? ? attachments.push(iterator); ? ? } else { ? ? ? images.push(iterator); ? ? } ? } ? const imageData: ImageData[] = []; ? const affixData: AffixData[] = []; ? for (const i of images) { ? ? const imgBase64 = await readFileAsDataURL(i); ? ? imageData.push({ ? ? ? name: i.name, ? ? ? imgBase64, ? ? }); ? } ? for (const i of attachments) { ? ? const affixBase64 = await readFileAsDataURL(i); ? ? affixData.push({ ? ? ? name: i.name, ? ? ? affixBase64, ? ? }); ? } ? return { ? ? imageData, ? ? affixData, ? }; };
拿到上一步返回的數(shù)據(jù)調(diào)接口
到此這篇關(guān)于react將文件轉(zhuǎn)為base64上傳的示例代碼的文章就介紹到這了,更多相關(guān)react將文件轉(zhuǎn)為base64進(jìn)行上傳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用React-Router實(shí)現(xiàn)前端路由鑒權(quán)的示例代碼
這篇文章主要介紹了使用React-Router實(shí)現(xiàn)前端路由鑒權(quán)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07React引入css的幾種方式及應(yīng)用小結(jié)
這篇文章主要介紹了React引入css的幾種方式及應(yīng)用小結(jié),操作styled組件的樣式屬性,可在組件標(biāo)簽上定義屬性、也可以通過(guò)attrs定義屬性,本文通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03React hooks如何清除定時(shí)器并驗(yàn)證效果
在React中,通過(guò)自定義Hook useTimeHook實(shí)現(xiàn)定時(shí)器的啟動(dòng)與清除,在App組件中使用Clock組件展示當(dāng)前時(shí)間,利用useEffect鉤子在組件掛載時(shí)啟動(dòng)定時(shí)器,同時(shí)確保組件卸載時(shí)清除定時(shí)器,避免內(nèi)存泄露,這種方式簡(jiǎn)化了狀態(tài)管理和副作用的處理2024-10-10