vue項(xiàng)目使用pdf以及解決pdf.js不支持跨域問題

一:pdf.js使用

1:下載pdf

j進(jìn)入pdf.js官網(wǎng)地址:https://mozilla.github.io/pdf.js/getting_started/#download
下載所需要的pdf版本

下載pdf.png

2:將下載的pdf文件放入項(xiàng)目靜態(tài)文件中裸违,vue3.0的話放入到public下杏慰,如果是vue2.x版本直接放在根目錄的static下
文件放入.png
3:頁面使用
<iframe :src="'/static/js/pdf/web/viewer.html?file=' + filePath" width="100%" height="100%"></iframe>

其中file為pdf的地址鏈接

二:跨域問題

我們在日常項(xiàng)目中常見一種業(yè)務(wù)場景,那就是我們上傳的文件會被放在一個(gè)文件服務(wù)器裸诽,和項(xiàng)目的服務(wù)器不在同一個(gè)域名下胶逢,那么就會出現(xiàn)跨域問題同云≡劭郏控制臺會報(bào)下面的錯(cuò)誤
跨域.png

那么如何解決呢缩多?個(gè)人認(rèn)為有三種,但是本身只嘗試了兩種养晋,第三種需要各位客官自己去嘗試下

1:配置CORS跨域(簡單粗暴)

在目標(biāo)服務(wù)器頭部配置以下方法支持跨域即可

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS
Access-Control-Expose-Headers: Accept-Ranges, Content-Encoding, Content-Length, Content-Range

使用方法方法

this.filePath = '目標(biāo)服務(wù)器地址以及端口/demo.pdf'

此方案簡單粗暴衬吆,但是在某種程度上可能會導(dǎo)致安全性問題
2:使用文件流的方式
此方案需要后臺配合通過接口將pdf轉(zhuǎn)成文件流的方式返回給前端
接口調(diào)用

var res = await getBlob({
       fileName: fileName
 })
this.filePath = encodeURIComponent(this.getObjectURL(res));
// 將返回的流數(shù)據(jù)轉(zhuǎn)換為url
    getObjectURL (file) {
      var binaryData = [];
      binaryData.push(file);
      let url = null;
      if (window.createObjectURL !== undefined) { // basic
        url = window.createObjectURL(new Blob(binaryData, {type: 'application/pdf'}));
      } else if (window.webkitURL !== undefined) { // webkit or chrome
        try {
          url = window.webkitURL.createObjectURL(new Blob(binaryData, {type: 'application/pdf'}));
        } catch (error) {

        }
      } else if (window.URL !== undefined) { // mozilla(firefox)
        try {
          url = window.URL.createObjectURL(new Blob(binaryData, {type: 'application/pdf'}));
        } catch (error) {

        }
      }
      return url;
    }

注:請求接口的responseType需要設(shè)置為bolb,否則頁面渲染出來后是一片空白,請求方法如下

export const getBlob = (data) => {
  return originAxios({
    url: `${config.baseURL}/xxxxx`,
    method: 'get',
    params: data,
    responseType: 'blob',
    headers: {
      'Content-Type': 'multipart/form-data',
      Authorization: localStorage.userToken
    },
    withCredentials: true
  });
};

此方案有一個(gè)弊端绳泉,就是當(dāng)文件過大的時(shí)候逊抡,渲染會占用時(shí)間過長,所以如果文件過大零酪,建議采用分片切割獲取方式來展示冒嫡。(在此感謝陽哥提醒)

3:使用nginx配置代理

此方案暫時(shí)沒有嘗試,所以不過多說明四苇,各位看官可以自行嘗試
nginx配置

location /files {
  proxy_pass 目標(biāo)服務(wù)器以及端口/;
}

頁面使用

this.filePath = '/demo.pdf'

三:查看頁面

按照上面的方案打開頁面孝凌,會發(fā)現(xiàn)控制臺依舊報(bào)錯(cuò),原因是pdf源碼做了一個(gè)處理月腋,所以只需要將viewer.js的以下代碼注釋掉即可

if (origin !== viewerOrigin && protocol !== "blob:") {
    throw new Error("file origin does not match viewer's");
}

至此pdd.js以及跨域問題解決完畢蟀架。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市榆骚,隨后出現(xiàn)的幾起案子片拍,更是在濱河造成了極大的恐慌,老刑警劉巖妓肢,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捌省,死亡現(xiàn)場離奇詭異,居然都是意外死亡碉钠,警方通過查閱死者的電腦和手機(jī)纲缓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喊废,“玉大人祝高,你說我怎么就攤上這事〔儋鳎” “怎么了褂策?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵横腿,是天一觀的道長颓屑。 經(jīng)常有香客問我,道長耿焊,這世上最難降的妖魔是什么揪惦? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮罗侯,結(jié)果婚禮上器腋,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好纫塌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布诊县。 她就那樣靜靜地躺著,像睡著了一般措左。 火紅的嫁衣襯著肌膚如雪依痊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天怎披,我揣著相機(jī)與錄音胸嘁,去河邊找鬼。 笑死凉逛,一個(gè)胖子當(dāng)著我的面吹牛性宏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播状飞,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼毫胜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诬辈?” 一聲冷哼從身側(cè)響起指蚁,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎自晰,沒想到半個(gè)月后凝化,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酬荞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年搓劫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片混巧。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枪向,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咧党,到底是詐尸還是另有隱情秘蛔,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布傍衡,位于F島的核電站深员,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛙埂。R本人自食惡果不足惜倦畅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绣的。 院中可真熱鬧叠赐,春花似錦欲账、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至罢洲,卻和暖如春俄删,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奏路。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工畴椰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸽粉。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓斜脂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親触机。 傳聞我的和親對象是個(gè)殘疾皇子帚戳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354