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

前端通過(guò)http獲取圖片流并轉(zhuǎn)存

這篇具有很好參考價(jià)值的文章主要介紹了前端通過(guò)http獲取圖片流并轉(zhuǎn)存。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一.場(chǎng)景

? ? ? ? 昨天公司里面提了一個(gè)需求,將競(jìng)爭(zhēng)對(duì)手的sku通過(guò)一些手段導(dǎo)入我們自己的數(shù)據(jù)庫(kù),普通數(shù)據(jù)比較好搞,但是圖片這種靜態(tài)資源我們只能獲取到一個(gè)url,所以需要進(jìn)行一次轉(zhuǎn)存。

二.實(shí)現(xiàn)

? ? ? ? 這里有兩個(gè)思路,一個(gè)是交給后端來(lái)做這個(gè)事情,但是后端做的話,會(huì)暴露我們自己的后端,給對(duì)手留下痕跡。第二個(gè)就是前端來(lái)做,每次使用不同的電腦訪問(wèn)網(wǎng)站來(lái)做這個(gè)數(shù)據(jù)轉(zhuǎn)存的操作就給追蹤提高難度,因?yàn)閷?duì)方也不知道我們是否是正常的訪問(wèn)資源。

? ? ? ? 最終選擇了前端來(lái)做。第一步,通過(guò)http獲取到該網(wǎng)站的數(shù)據(jù),模擬登錄獲取token,截取下來(lái)他的商品列表數(shù)據(jù)。這個(gè)就不貼代碼了,也可以通過(guò)不使用代碼的方式來(lái)實(shí)現(xiàn)。

? ? ? ? 第二步。將獲取到的商品數(shù)據(jù)里面的圖片讀取出來(lái)并上傳

/** 
* @descrip 將blob對(duì)象轉(zhuǎn)換成file對(duì)象
* @param {Blob} blob  需要轉(zhuǎn)換成文件的blob對(duì)象
* @param {string} fileName 文件名
* @param {string} fileType 文件類型
* @return {Promise} 返回一個(gè)promise對(duì)象,即處理之后的文件對(duì)象
**/
const transToFile = async(blob, fileName, fileType) => {
    return new window.File([blob], fileName, { type: fileType })
}

/** 
* @descrip 將互聯(lián)網(wǎng)上面的圖片讀取成buffer并且轉(zhuǎn)存至私有的服務(wù)器
* @param {string} url  需要轉(zhuǎn)換成的圖片的公網(wǎng)地址 eg:https://image.xxx.com/uploads/image/product/62b2babba1c9c_thumb.jpg
* @return {Promise} 返回一個(gè)promise對(duì)象,即上傳成功之后的圖片url
**/
const getFileStreamAndUpload = async (url) => {
    return new Promise((resolve, reject) => {
        let suffix = "jpg"
        let fileNameArr = url.split("/")
        let fileName = fileNameArr[fileNameArr.length - 1]
        if (url.split(".").length > 1) {
            suffix = url.split(".")[1]
        }
        // 通過(guò)axios讀取圖片時(shí)一定要加上這個(gè)responseType,不然是亂碼
        axios.get(url, {responseType: 'arraybuffer'}).then(async res => {
            // 構(gòu)建blob對(duì)象
            const blob = new Blob([res.data], { type: `image/${suffix};charset=utf-8` })
            let getFile = transToFile(blob, fileName, `image/${suffix}`)
            getFile.then(async res1 => {
                // 通過(guò)FormData將文件提交給后端
                let formData = new FormData()
                formData.append('file', res1)
                formData.append('folderName', "fsImage")
                let res2 = await bar.uploadFile(formData)
                if (res2.code == 200) {
                    resolve(res2.data)
                } else {
                    reject(new Error("圖片上傳失敗"))
                }
            })
        })
    })
}
             // 獲取數(shù)據(jù)成功之后
            const loadingInstance = ElLoading.service({ fullscreen: true })
            // 這里的res.data.data 就是競(jìng)爭(zhēng)對(duì)手的商品列表數(shù)據(jù)
            let fsData = res.data.data
            for (let i = 0; i < fsData.length; i++) {
                const item = fsData[i];
            // 這里可能會(huì)出現(xiàn)跨域請(qǐng)求資源的情況所以使用代理將真實(shí)的域名代理到本地的開發(fā)服務(wù)器上面
                item.productUrl = await getFileStreamAndUpload(item.thumb_path.replace("https://image.xxx.com", "/fsimgapi"))
            }
            console.log(fsData);
            loadingInstance.close()
            ElMessage.success("數(shù)據(jù)轉(zhuǎn)移成功")

?效果圖,這里轉(zhuǎn)換完成之后就直接輸出了一個(gè)轉(zhuǎn)換后的數(shù)組出來(lái),后續(xù)根據(jù)業(yè)務(wù)需求將這個(gè)數(shù)組提交給后端即可。

?http接收?qǐng)D片,前端技術(shù)分享,前端,http,javascript

?http接收?qǐng)D片,前端技術(shù)分享,前端,http,javascript

三.總結(jié)?

其實(shí)這種功能最好還是由后端或者nodejs來(lái)做,純前端不可避免的會(huì)遇到跨域問(wèn)題。主要的技術(shù)要點(diǎn)就是將網(wǎng)絡(luò)上面的靜態(tài)資源通過(guò)讀取成流的形式放在瀏覽器緩存里面,然后利用Blob對(duì)象跟File對(duì)象之間的互相轉(zhuǎn)換,就可以得到一個(gè)個(gè)的文件對(duì)象了,最后通過(guò)FormData將數(shù)據(jù)上傳即可。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-623663.html

到了這里,關(guān)于前端通過(guò)http獲取圖片流并轉(zhuǎ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)文章

  • java 通過(guò)HTTP接收json

    一: json接收類, 第一個(gè)接口為直接傳參接收 第二個(gè)接口接收json字符串 可以寫個(gè)HTTP測(cè)試類調(diào)用測(cè)試,也可以postman測(cè)試調(diào)用,實(shí)例方法貼到下面 二:HTTP工具類 三:Test測(cè)試類

    2024年02月16日
    瀏覽(15)
  • http發(fā)送和接收?qǐng)D片json文件

    1、先將圖片轉(zhuǎn)換為base64格式 2、將數(shù)據(jù)以json格式進(jìn)行發(fā)送 其中?ImgInfo 類為: 上述代碼中json數(shù)據(jù)有五個(gè)部分:image為圖片數(shù)據(jù),level是告警等級(jí),rtsp為數(shù)據(jù)流地址,type是算法類型,label是算法標(biāo)簽等,所以數(shù)據(jù)發(fā)送為這五個(gè)內(nèi)容。 HttpServer.cpp如下:? ?HttpServer.h如下: httpu

    2024年02月07日
    瀏覽(157)
  • 用python通過(guò)http實(shí)現(xiàn)文件傳輸,分為發(fā)送端和接收端

    要使用Python通過(guò)HTTP實(shí)現(xiàn)文件傳輸,可以使用Python的 requests 庫(kù)來(lái)發(fā)送和接收HTTP請(qǐng)求。以下是一個(gè)示例代碼,其中包括發(fā)送端和接收端的實(shí)現(xiàn)。 發(fā)送端: 接收端: 在這個(gè)示例中,發(fā)送端使用 requests.post() 方法發(fā)送文件到指定的URL。接收端使用Flask框架創(chuàng)建一個(gè)HTTP服務(wù)器,并在

    2024年02月15日
    瀏覽(26)
  • 后端返回圖片,前端接收并顯示的解決方案

    后端通過(guò)二進(jìn)制流的形式,寫入response中 controller層 service層 axios接受數(shù)據(jù)時(shí),responseType 默認(rèn)返回?cái)?shù)據(jù)類型是 json,必須將其改為返回?cái)?shù)據(jù)類型 blob。否則axois無(wú)法正確解析數(shù)據(jù)。 這里的http.request是對(duì)axios的封裝,把他當(dāng)作axios用就行 vue界面渲染 后端接口,最好不要有返回值,

    2024年02月12日
    瀏覽(158)
  • python-自動(dòng)化篇-辦公-將PDF文件轉(zhuǎn)存為圖片

    python-自動(dòng)化篇-辦公-將PDF文件轉(zhuǎn)存為圖片

    因工作中的某些奇葩要求,需要將PDF文件的每頁(yè)內(nèi)容轉(zhuǎn)存成按順序編號(hào)的圖片。用第三方軟件或者在線轉(zhuǎn)換也可以,但批量操作還是Python方便,所謂搞定辦公自動(dòng)化,Python出山,一統(tǒng)天下;Python出征,寸草不生~ O(∩_∩)O 不過(guò)這個(gè)需要用到 PyMuPDF 庫(kù),電腦運(yùn)行cmd,輸入“pip

    2024年02月19日
    瀏覽(33)
  • Base64加密后的數(shù)據(jù)通過(guò)http傳輸后,后臺(tái)接收到的數(shù)據(jù)會(huì)出現(xiàn)空格的問(wèn)題分析

    Base64加密后的數(shù)據(jù)通過(guò)http傳輸后,后臺(tái)接收到的數(shù)據(jù)會(huì)出現(xiàn)空格的問(wèn)題分析

    最近在項(xiàng)目中使用fetch發(fā)請(qǐng)求,開始時(shí)選擇自己將post請(qǐng)求的body參數(shù)使用進(jìn)行拼接,但是在發(fā)送請(qǐng)求時(shí)在控制臺(tái)顯示的參數(shù),有的會(huì)存在傳遞的+變成空格的情況,百思不得其解。 查閱資料后發(fā)現(xiàn)可能是http傳參時(shí)urlencoded的問(wèn)題(因?yàn)槲业膒ost請(qǐng)求的content-Type是application/x-www-for

    2024年02月03日
    瀏覽(23)
  • 微信小程序怎么通過(guò)圖片鏈接獲取圖片寬高比(適合在下載圖片前獲取寬高比)

    在微信小程序中,可以通過(guò) wx.getImageInfo 來(lái)獲取圖片鏈接的寬高信息: getImageInfo 是一個(gè)異步API,它會(huì)去下載圖片并獲取到圖片的寬高信息。 主要步驟: 1. 通過(guò) wx.getImageInfo 獲取圖片寬高 2. 在 success 回調(diào)中可以拿到 width 和 height 3. 將 width 除以 height 即可計(jì)算出寬高比 ratio 注意: -

    2024年02月03日
    瀏覽(98)
  • RTPEngine 通過(guò) HTTP 獲取指標(biāo)的方式

    RTPEngine 通過(guò) HTTP 獲取指標(biāo)的方式

    RTPEngine 是常用的媒體代理服務(wù)器,通常被集成到 SIP 代理服務(wù)器中以減小代理服務(wù)器媒體傳輸?shù)膲毫Γ浼軜?gòu)如下圖所示。這種使用方式相當(dāng)于將 RTPEngine 隱藏在 SIP 代理服務(wù)器后面,我們雖然可以借助 SIP 代理服務(wù)器提供的相關(guān)接口有限操作 RTPEngine,但是對(duì) RTPEngine 實(shí)例的相

    2024年02月10日
    瀏覽(37)
  • 【Java】如何通過(guò)一次請(qǐng)求獲取多張圖片

    【Java】如何通過(guò)一次請(qǐng)求獲取多張圖片

    背景:一次請(qǐng)求響應(yīng)一張圖片 這是我們熟練的業(yè)務(wù),就是用戶訪問(wèn)我們編寫的接口,后端服務(wù)就響應(yīng)一張圖片給網(wǎng)頁(yè),也就是一個(gè)url對(duì)應(yīng)的就是一個(gè)圖片資源 下面是具體的業(yè)務(wù)代碼和注釋 編寫完這些代碼后運(yùn)行后端服務(wù),然后我們?cè)诰W(wǎng)頁(yè)上訪問(wèn)這個(gè)接口 ?圖片成功的在網(wǎng)頁(yè)

    2024年02月07日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包