最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用nginx解決前端js下載跨域問題

 更新時(shí)間:2023年10月24日 08:58:50   作者:只因黑子劉老六  
訂單系統(tǒng)增加附件預(yù)覽,下載的功能,但是這個(gè)附件是客戶推單時(shí)推送過來的,文件連接是類似oss連接,但是是客戶的域名,所以導(dǎo)致跨域問題,本文小編將給大家介紹如何用nginx解決前端js下載跨域問題,需要的朋友可以參考下

背景

訂單系統(tǒng)增加附件預(yù)覽 , 下載的功能,但是這個(gè)附件是客戶推單時(shí)推送過來的,文件連接是類似oss連接,但是是客戶的域名,所以導(dǎo)致跨域問題.

前端是vue項(xiàng)目

解決過程

1.面向百度編程

先百度了一番

基本都是說用 blob 這個(gè)我真不太了解,但是在項(xiàng)目里找到了別人寫的下載方法,也是用的blob,但是根本解決不了跨域問題.

2.擺爛

百度一番沒找到解決辦法,于是打算擺爛

附件預(yù)覽界面大約長(zhǎng)這樣子,直接鼠標(biāo)在鏈接上面右鍵另存為可以下載附件

于是改造了一下原來的下載方法 增加個(gè)友好提示

    downloadFile(url) {
      const fileName = this.getFilenameFromUrl(url); // 文件名
      const xhr = new XMLHttpRequest();
      xhr.open('GET', url, true);
      xhr.responseType = 'blob';
      const _this = this
      xhr.onload = function () {
        if (this.status === 200) {
          const blob = new Blob([this.response], {type: 'application/octet-stream'});
          const link = document.createElement('a');
          link.href = window.URL.createObjectURL(blob);
          link.download = fileName;
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
        }
      };
      // 增加友好提示 下載失敗讓用戶右鍵另存為
      xhr.onerror = function (){
        _this.$modal.msgError("下載失敗,請(qǐng)嘗試在鏈接上使用右鍵另存為");
      }
      xhr.send();
    }

3.重新出發(fā)

增加友好提示以后,同事都要被我笑死了,這種方式簡(jiǎn)直low爆了

于是我想到用nginx反向代理來解決這個(gè)問題

繼續(xù)百度

找到一篇地址

用本地nginx試了一下

location /download {
      if ($query_string ~*  ^(.*)url=(.*)$){
            set $imageUrl $2;
            proxy_pass $imageUrl;
      }
}

修改下載方法

downloadFile(url) {
      const fileName = this.getFilenameFromUrl(url); // 文件名
      const xhr = new XMLHttpRequest();
      const newUrl = 'http://localhost/download?url=' + url
      xhr.open('GET', newUrl, true);
      xhr.responseType = 'blob';
      const _this = this
      xhr.onload = function () {
        if (this.status === 200) {
          const blob = new Blob([this.response], {type: 'application/octet-stream'});
          const link = document.createElement('a');
          link.href = window.URL.createObjectURL(blob);
          link.download = fileName;
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
        }
      };
      xhr.onerror = function (){
        _this.$modal.msgError("直接下載失敗,請(qǐng)嘗試在鏈接上使用右鍵另存為");
      }
      xhr.send();
}

居然成功了,可以下載文件, 于是修改了一下 上測(cè)試服務(wù)器
最終版js

downloadFile(url) {
      const fileName = this.getFilenameFromUrl(url); // 文件名
      const xhr = new XMLHttpRequest();
      const newUrl = window.location.protocol + '//' + window.location.hostname + '/download?url=' + url
      xhr.open('GET', newUrl, true);
      xhr.responseType = 'blob';
      const _this = this
      xhr.onload = function () {
        if (this.status === 200) {
          const blob = new Blob([this.response], {type: 'application/octet-stream'});
          const link = document.createElement('a');
          link.href = window.URL.createObjectURL(blob);
          link.download = fileName;
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
        }
      };
      xhr.onerror = function (){
        _this.$modal.msgError("直接下載失敗,請(qǐng)嘗試在鏈接上使用右鍵另存為");
      }
      xhr.send();
}

4.新問題

上測(cè)試服務(wù)器后發(fā)現(xiàn)按下載按鈕還是失敗,發(fā)現(xiàn)居然報(bào)502

翻了一下nginx的報(bào)錯(cuò)日志

no resolver defined to resolve ........

百度了一下

原來nginx代理的地址如果是域名的話 需要增加dns解析 nginx并不會(huì)直接用系統(tǒng)的dns

location /download {
        resolver 你的dns;
        if ($query_string ~*  ^(.*)url=(.*)$){
                set $imageUrl $2;
                proxy_pass $imageUrl;
        }
}

設(shè)置完 resolver 后 再試 果然成功了

以上就是使用nginx解決前端js下載跨域問題的詳細(xì)內(nèi)容,更多關(guān)于nginx解決js下載跨域的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • nginx反向代理及使用詳解

    nginx反向代理及使用詳解

    nginx作為web服務(wù)器一個(gè)重要的功能就是反向代理,關(guān)于nginx 反向代理的使用你都了解嗎,今天通過本文給大家介紹下nginx反向代理及配置文件的組成部分,感興趣的朋友一起看看吧
    2022-02-02
  • nginx實(shí)現(xiàn)透轉(zhuǎn)的方法步驟

    nginx實(shí)現(xiàn)透轉(zhuǎn)的方法步驟

    本文主要介紹了nginx實(shí)現(xiàn)透轉(zhuǎn)的方法步驟,實(shí)現(xiàn)HTTP與HTTPS請(qǐng)求的客戶端IP地址透?jìng)?文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Apache和Nginx的優(yōu)缺點(diǎn)詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Apache和Nginx的優(yōu)缺點(diǎn)詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Nginx和Apache一樣,都是HTTP服務(wù)器軟件,在功能實(shí)現(xiàn)上都采用模塊化結(jié)構(gòu)設(shè)計(jì),都支持通用的語言接口。下面通過本文給大家分享Apache和Nginx比較 功能對(duì)比,感興趣的朋友參考下吧
    2017-08-08
  • nginx限速配置的三種方法(limit_req、limit_conn、limit_rate)

    nginx限速配置的三種方法(limit_req、limit_conn、limit_rate)

    本文主要介紹了nginx限速配置的三種方法,主要包括limit_req、limit_conn、limit_rate,本文就詳細(xì)的介紹一下如何使用,感興趣的可以了解一下
    2023-08-08
  • 詳解nginx使用ssl模塊配置支持HTTPS訪問

    詳解nginx使用ssl模塊配置支持HTTPS訪問

    這篇文章主要介紹了詳解nginx使用ssl模塊配置支持HTTPS訪問,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • CentOS利用Nginx搭建下載功能服務(wù)器

    CentOS利用Nginx搭建下載功能服務(wù)器

    這篇文章主要介紹了CentOS利用Nginx搭建下載功能服務(wù)器,需要的朋友可以參考下
    2017-06-06
  • nginx worker進(jìn)程循環(huán)的實(shí)現(xiàn)

    nginx worker進(jìn)程循環(huán)的實(shí)現(xiàn)

    這篇文章主要介紹了nginx worker進(jìn)程循環(huán)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • nginx狀態(tài)碼的使用及說明

    nginx狀態(tài)碼的使用及說明

    本文系統(tǒng)介紹了HTTP狀態(tài)碼分類及常見代碼含義,分為1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客戶端錯(cuò)誤)、5xx(服務(wù)器錯(cuò)誤)五類,涵蓋200、301、403、404、500等典型狀態(tài)碼,說明其應(yīng)用場(chǎng)景與響應(yīng)機(jī)制
    2025-10-10
  • Nginx一個(gè)IP如何配置多個(gè)站點(diǎn)的方法教程

    Nginx一個(gè)IP如何配置多個(gè)站點(diǎn)的方法教程

    這篇文章主要給大家介紹了關(guān)于Nginx一個(gè)IP如何配置多個(gè)站點(diǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • Nginx反向代理配置React前端與Python后端全過程

    Nginx反向代理配置React前端與Python后端全過程

    前后端分離項(xiàng)目里,前端通常是 React 打包后的靜態(tài)資源,后端是 Python(FastAPI/Flask)提供的 API,生產(chǎn)環(huán)境一般用 Nginx 做統(tǒng)一入口,本文只講 Nginx 反向代理的核心配置思路和關(guān)鍵片段,需要的朋友可以參考下
    2026-02-02

最新評(píng)論

门源| 湖北省| 潞城市| 屏山县| 凤冈县| 太湖县| 平顺县| 巩留县| 汾西县| 洪泽县| 神农架林区| 盘山县| 彩票| 观塘区| 同心县| 乐都县| 牟定县| 合川市| 随州市| 武强县| 北川| 巫溪县| 来安县| 南皮县| 玉门市| 宣城市| 固安县| 涟水县| 陇南市| 襄垣县| 卫辉市| 临漳县| 黄冈市| 海原县| 涞源县| 清水河县| 旬阳县| 义乌市| 临夏市| 囊谦县| 沙田区|