Vue でバイナリ ファイル ストリームを受信して​​ PDF プレビューを実現する方法

Vue でバイナリ ファイル ストリームを受信して​​ PDF プレビューを実現する方法

バックグラウンド コントローラー

@RequestMapping("/getPDFStream")
@レスポンス本文
パブリック void getPDFStream(HttpServletRequest リクエスト、HttpServletResponse レスポンス) {
 試す {
  リクエスト.setCharacterEncoding("utf-8");
 } キャッチ (UnsupportedEncodingException e) {
  logger.error("文字セット UnsupportedEncodingException を設定しました");
 }
 文字列 fileName = request.getParameter("fileName");
 //ファイルパスString filePathname = Const.UPLOAD_HBFILE_PATH + "/" + fileName
   + ".pdf";
 ファイル file = new File(filePathname);
 バイト[]データ = null;
 ファイルが存在する場合(){
  logger.error("申し訳ありませんが、ファイルが存在しません!");
 } それ以外 {
  試す {
   FileInputStream 入力 = new FileInputStream(ファイル);
   データ = 新しいバイト[input.available()];
   input.read(データ);
   レスポンス.getOutputStream().write(データ);
   入力を閉じます。
  } キャッチ (例外 e) {
   // TODO 自動生成されたキャッチブロック
   e.printStackTrace();
   logger.error("pdf ファイル処理例外");
  }
 }
}

フロント受付

axios、request.jsをカプセル化する

'axios' から axios をインポートします
/**
 * axios 非同期リクエストをカプセル化する方法==================
 */
//axios オブジェクトを作成する-----------
定数リクエスト = axios.create({
    //baseURL:'/dev-api', //ベースパス baseURL:process.env.VUE_APP_BASE_API, //環境に応じて異なる定数値をロード // baseURL: '/',
    timeout: 50000, //リクエストタイムアウト、50000ミリ秒})
//リクエストインターセプターを設定する======================================
//リクエストのインターセプション--------------------
リクエスト.インターセプター.リクエスト.use(config => {
    //リクエストインターセプション config.data = {
        ...config.data、
        ユーザーID: sessionStorage.getItem('userId')
    }
    設定を返します。
}, エラー => {
    //例外 return Promise.reject(error); //es6 書き込み });
//レスポンスインターセプターを設定する====================================
//傍受に応答--------------------
リクエスト.インターセプター.レスポンス.use(レスポンス => {
    if(!response.data||response.data==""){
        '{"flag":"failure","msg":"不明なエラー"}' を返します。
    }
    応答データを返します。
},エラー =>{
    Promise.reject(error) を返します。
})
export default request // 他のコンポーネントで使用するためにカスタム作成された axios オブジェクトをエクスポートします

メソッド common.js を定義する

import request from '@/utils/request' //カプセル化されたaxiosリクエストメソッドをインポートする export function getPDFStream(param) {
   リクエストを返す({
        url: 'xxxxxx/getPDFStream',
        メソッド: 'post'、
        // パラメータデータを渡す: param,
        ヘッダー: { 'Content-Type': 'application/x-www-form-urlencoded' },
        レスポンスタイプ: 'blob',
        変換リクエスト: 関数(obj) {
            var str = [];
            (変数 p 内の obj) の場合
                str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
            str.join("&"); を返します。
        },
 })
}

ページコード

 <a-モーダル
  幅="900px"
  title="ファイルビュー"
  v-model="lookPdfFile"
  :footer="null"
  :forceRender="true"
  @ok="PDFファイルを見る"
>
  <div :style="{ 高さ: '600px', 最小高さ: '500px', 余白: '8px 0px' }">
     <iframe :src="pdfUrl" id="previewPdf" frameborder="0" style="幅: 100%; 高さ: 100%"></iframe>
  </div>
</a-modal>
// メソッドをインポートしますimport {getPDFStream} from "@/api/common";
//データを定義する
lookPdfFile:false, //PDF をプレビュー
pdfUrl:'', // pdf パス

キーコード(ファイル名を取得後、getPDFStreamメソッドを呼び出してファイルストリームを取得します)

 _this = this とします。
 if(サフィックス == 'pdf'){
   PDFストリームを取得する({
     ファイル名: ファイル名、
   }).then(res => {
     reader を new window.FileReader() に設定します。
     // readAsArrayBuffer を使用してファイルを読み取ります。結果プロパティには、読み取ったファイルのデータを表す ArrayBuffer オブジェクトが含まれます。reader.readAsArrayBuffer(res);
     reader.onload = 関数(e) {
       定数結果 = e.target.result
       定数コンテンツタイプ = res.type
       // BLOB イメージを生成します。パラメータが必要です (バイト配列、ファイル タイプ)
       const blob = new Blob([結果], { type: 'application/pdf' })
       // Blobを使用して、型付き配列を指すURLを作成します。URL.createObjectURLは新しいBlobファイルのメソッドで、通常のURLを生成し、img.srcなどに直接使用できます。if (window.createObjectURL != undefined) { // 基本
         _this.pdfUrl = window.createObjectURL(blob)+'#toolbar=0'
       } else if (window.webkitURL != undefined) { // webkit または chrome
         試す {
           _this.pdfUrl = window.webkitURL.createObjectURL(blob)+'#toolbar=0'
         } キャッチ(エラー){

         }
       } そうでない場合 (window.URL != undefined) { // mozilla(firefox)
         試す {
           _this.pdfUrl = window.URL.createObjectURL(blob)+'#toolbar=0'
         } キャッチ(エラー){

         }
       }
     }
     this.$nextTick(() => {
       this.lookPdfFile = true;
     })
   })
   戻る;
 }

これで、Vue でバイナリ ファイル ストリームを受信して​​ PDF プレビューを実装する方法についての説明は終わりです。Vue バイナリ ファイル ストリーム PDF プレビューに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vue-pdf はオンラインファイルプレビューを実現します
  • Vue で pdfjs を使用して PDF ファイルをプレビューする方法
  • Vue-pdfはPDFファイルのオンラインプレビューを実装します
  • Vue は PDF.js を統合して PDF プレビューを実装し、透かしを追加する手順を実行します。
  • vue vue-pdf を使用して PDF オンライン プレビューを実装するためのサンプル コード
  • Vue は PDF ファイルのオンライン プレビューとダウンロードを実装します (pdf.js)
  • Vue プラグイン開発: pdf.js を使用してモバイル フォンで PDF ドキュメントのオンライン プレビューを実現する方法
  • VueでPDFファイルのプレビューを実装する方法

<<:  ウェブフォーム送信方法の詳細な概要

>>:  タグのhref属性とonclickイベントの使用例

推薦する

MySQL ジョイントインデックス(複合インデックス)の実装

共同インデックスこの記事におけるジョイントインデックスの定義は次のとおりです (MySQL): AL...

MySQLリモート接続権限の詳細な説明

1. MySQLデータベースにログインするmysql -u ルート -pユーザーテーブルを表示する ...

Dockerの核となる原則であるCgroupの詳細な説明

カーネル内の強力なツール cgroup は、NameSpace によって分離されたリソースを制限でき...

Ant Design Pro ログイン機能にグラフィック検証コード コンポーネントを統合する方法

序文:この記事では、Ant Design Proログイン機能にグラフィック検証コードコンポーネントを...

5分でDockerを使ってRedisのクラスターモードとセンチネルモードを構築する方法を教えます

目次1. 準備Redisイメージを取得する2. Redis Sentinel マスタースレーブモード...

MySQL データベースの基礎 SQL ウィンドウ関数の例の分析チュートリアル

目次導入導入集計関数 + over()ソート関数 + over() ntile() 関数 + ove...

Reactにおけるキーの役割の詳細な説明

目次質問: ボタンをクリックすると、スパンの色が赤に変わりますか?上記の問題を分析します。 2番目の...

MySQLログシステムの使い方に関する簡単なチュートリアル

目次序文1. エラーログ2. バイナリログ1. バイナリログを有効にする2. バイナリログ形式3. ...

VirtualBox CentOS7.7.1908 Python3.8 ビルド Scrapy 開発環境 [グラフィックチュートリアル]

目次環境CentOSをインストールするyum 国内ミラーソースを構成するサードパーティの依存関係をイ...

Mysql8.0はソート問題を解決するためにウィンドウ関数を使用する

MySQL ウィンドウ関数の紹介MySQL は MySQL 8.0 以降、ウィンドウ関数をサポートし...

Chrome 73 によるフレックスレイアウトの崩れの解析と解決方法

現象プロジェクトにはネストされたフレックス構造がいくつかあります。 <スタイル> /* ...

Vueプロジェクトを大画面に適応させる方法の例

レムの簡単な分析まず、remはCSS単位です。pxの固定ピクセル単位と比較すると、remはより柔軟性...

JSは検証コードのランダム生成を実装します

この記事の例では、検証コードのランダム生成を実現するためのJSの具体的なコードを参考までに共有してい...

JavaScriptの基礎を学ぶ

目次1. JavaScriptを記述する場所2. JavaScriptでよく使われる入力文と出力文1...

Linux でプロセスを効果的に管理するための 8 つのコマンド

序文プロセス管理の役割:サーバーの健全性状態を判定する: プロセスの状態 (メモリ、CPU 占有率な...