React中上傳圖片到七牛的示例代碼
之前有寫過(guò)類似的一篇文章,有位同學(xué)突然找來(lái)解惑,發(fā)現(xiàn)自己采用了另外的一個(gè)方法,這里也分享下,希望對(duì)使用reactjs的同學(xué)有幫助。
邏輯思路是這樣子的,在componentDidMount中實(shí)現(xiàn)更新dom的操作,異步加載需要的資源文件,然后在加載完后實(shí)現(xiàn)qiniu的初始化操作。這里就不需要在webpack或者其他打包工具中去引入qiniu的包文件,導(dǎo)致打完包的文件過(guò)大了。
我這里使用了nodejs的庫(kù)scriptjs,
const $S = require('scriptjs');
可以實(shí)現(xiàn)異步的加載文件,當(dāng)然你也可以使用你認(rèn)為更好的,當(dāng)然也別忘記告訴我下。以下為代碼實(shí)現(xiàn)部分:
async componentDidMount() { let uploadToken = await this.getUploadToken(); $S([ 'https://dn-kdjz.qbox.me/js/plupload/2.1.1/plupload.full.min.js', 'https://dn-kdjz.qbox.me/js/qiniu-js-sdk/1.0.17.2/qiniu.min.js' ], 'uploadBundle'); $S.ready('uploadBundle', () => { // 證件合影 let options1 = { runtimes: 'html5,flash,html4', browse_button: 'photoId', uptoken: uploadToken, get_new_uptoken: false, domain: 'https://xxxx.xxxxxx', // bucket域名,下載資源時(shí)用到,必需 container: 'photoIdContainer', // 上傳區(qū)域DOM ID,默認(rèn)是browser_button的父元素 max_file_size: '100mb', // 最大文件體積限制 flash_swf_url: '/js/plupload/2.2.1/Moxie.swf', //引入flash,相對(duì)路徑 max_retries: 3, // 上傳失敗最大重試次數(shù) dragdrop: true, // 開啟可拖曳上傳 drop_element: 'photoIdContainer', // 拖曳上傳區(qū)域元素的ID,拖曳文件或文件夾后可觸發(fā)上傳 chunk_size: '4mb', // 分塊上傳時(shí),每塊的體積 auto_start: true, // 選擇文件后自動(dòng)上傳,若關(guān)閉需要自己綁定事件觸發(fā)上傳 init: { 'FilesAdded': (up, files) => { plupload.each(files, function(file) { // 文件添加進(jìn)隊(duì)列后,處理相關(guān)的事情 }); }, 'BeforeUpload': (up, file) => { // 每個(gè)文件上傳前,處理相關(guān)的事情 }, 'UploadProgress': (up, file) => { // 每個(gè)文件上傳時(shí),處理相關(guān)的事情 }, 'FileUploaded': async(up, file, info) => { // 查看簡(jiǎn)單反饋 let domain = up.getOption('domain'); let res = JSON.parse(info); let sourceLink = await this.getDownloadUrl(res.key); this.setState({ photoIdKey: res.key, photoId: sourceLink }) }, 'Error': (up, err, errTip) => { //上傳出錯(cuò)時(shí),處理相關(guān)的事情 console.log(err); }, 'UploadComplete': () => { //隊(duì)列文件處理完畢后,處理相關(guān)的事情 console.log('上傳完成'); }, 'Key': (up, file) => { let timestamp = parseInt((new Date().valueOf() / 1000)); // 若想在前端對(duì)每個(gè)文件的key進(jìn)行個(gè)性化處理,可以配置該函數(shù) // 該配置必須要在unique_names: false,save_key: false時(shí)才生效 let key = `idcard/${timestamp}_${file.name}`; return key } } }; // 第一個(gè)按鈕 const uploader1 = Qiniu.uploader(options1); }) }
這里有個(gè)getUploadToken方法,這個(gè)方法是根據(jù)官方文檔的策略實(shí)現(xiàn)了一個(gè)獲取上傳token的方法,此方法是通過(guò)訪問(wèn)服務(wù)端的接口來(lái)獲取token。具體實(shí)現(xiàn)過(guò)程可以參考官方。如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
react使用useState修改對(duì)象或者數(shù)組的值無(wú)法改變視圖的問(wèn)題
這篇文章主要介紹了react使用useState修改對(duì)象或者數(shù)組的值無(wú)法改變視圖的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08React如何使用axios請(qǐng)求數(shù)據(jù)并把數(shù)據(jù)渲染到組件
這篇文章主要介紹了React如何使用axios請(qǐng)求數(shù)據(jù)并把數(shù)據(jù)渲染到組件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08React?中使用?react-i18next?國(guó)際化的過(guò)程(react-i18next?的基本用法)
i18next?是一款強(qiáng)大的國(guó)際化框架,react-i18next?是基于?i18next?適用于?React?的框架,本文介紹了?react-i18next?的基本用法,如果更特殊的需求,文章開頭的官方地址可以找到答案2023-01-01解決React報(bào)錯(cuò)Expected?`onClick`?listener?to?be?a?function
這篇文章主要為大家介紹了React報(bào)錯(cuò)Expected?`onClick`?listener?to?be?a?function解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12React?程序設(shè)計(jì)簡(jiǎn)單的輕量級(jí)自動(dòng)完成搜索框應(yīng)用
這篇文章主要為大家介紹了React?程序設(shè)計(jì)簡(jiǎn)單的輕量級(jí)自動(dòng)完成搜索框應(yīng)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Electron整合React使用搭建開發(fā)環(huán)境的步驟詳解
這篇文章主要介紹了Electron整合React使用搭建開發(fā)環(huán)境,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2020-06-06