フロントエンドの vue+express ファイルのアップロードとダウンロードの例

フロントエンドの vue+express ファイルのアップロードとダウンロードの例

新しいserver.jsを作成する

糸初期化 -y
糸を追加エクスプレスノードモン -D
var express = require("express");
定数 fs = require("fs");
var パス = require("パス");
const multer = require("multer"); // パスを指定します var app = express();
app.use(express.json());
app.use(express.urlencoded({extended: true}));
// フロントエンドはクロスドメインの問題を解決します app.all("*", (req, res, next) => {
  res.header("アクセス制御許可オリジン", "*");
  次();
});
// 静的リソースにアクセスする app.use(express.static(path.join(__dirname)));

// ファイルのアップロード app.post("/upload", multer({ dest: "./public" }).any(), (req, res) => {
  const { フィールド名、 元の名前 } = req.files[0];
  // 新しいパスを作成します const name = fieldname.slice(0, fieldname.indexOf("."));
  const newName = "public/" + name + path.parse(originalname).ext;
  fs.rename(req.files[0].path, newName, 関数(err) {
    もし(エラー){
      res.send({ code: 0, msg: "アップロードに失敗しました", data: [] });
    } それ以外 {
      res.send({ code: 1, msg: "アップロード成功", data: newName });
    }
  });
});
// ファイルのダウンロード app.get('/download', function(req, res) {
  res.download('./public/test.xls');
});

// 画像のダウンロード app.get('/download/img', function(req, res) {
  res.download('./public/2.jpg');
});

ポートを 9527 にします。
app.listen(port, () => console.log(`ポートが開始されました: http://localhost:${port}`));


(1)フロントエンドファイルアップロードリクエスト

最初のタイプ: フォーム

 <フォームアクション="http://localhost:9527/upload" メソッド="POST" encType="multipart/form-data">
      <input type="file" name="user"/>
      <input type="submit" />
    </フォーム>

ここに画像の説明を挿入

最初のタイプ: 入力ボックス

 <input type="file" @change="changeHandler($event)"/>
     changeHandler(イベント) {
      ファイルをevent.target.files[0]とします。
      console.log("ファイル",ファイル)
      データを新しいFormData()に格納します。
      data.append(files.name,files);
      console.log("データ",データ)
      axios.post("http://localhost:9527/upload",データ,{
        ヘッダー:{
          "コンテンツタイプ":"マルチパート/フォームデータ"
        }
      }).then(res =>{
        コンソールログ("res",res)
      })
    }, 

ここに画像の説明を挿入

(2)フロントエンドファイルのダウンロード

最初の方法: バックエンドはダウンロードリンクアドレスを返し、フロントエンドはそれを直接使用できます。
2番目の方法: バイナリストリームファイルを使用してダウンロードする

 <input type="button" value="クリックしてダウンロード" @click="handleDownload">
      ハンドルダウンロード() {  
    アクシオス({  
      メソッド: 'get'、  
      URL: "http://localhost:9527/download",  
      データ: {    
        test: 「テストデータ」  
      },  
      responseType: "arraybuffer" // arraybuffer は js でバイナリを処理するためのインターフェースです}).then(response => {          
      // 返されたバイナリ データを使用して Blob インスタンスを作成します if(!response) return;
      blob = new Blob([response.data], {            
        タイプ: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 
      }) // .xlsx ファイルの場合          
      // URL.createObjectURL を通じてファイル パスを生成します。let url = window.URL.createObjectURL(blob) 
      console.log("url==========",url)        
      // タグを作成する let ele = document.createElement("a")          
      ele.style.display = 'なし'          
      // href属性をファイルパスに設定し、download属性をファイル名に設定します。ele.href = url          
      ele.download = this.name          
      // ページに a タグを追加し、クリックをシミュレートします。 document.querySelectorAll("body")[0].appendChild(ele)          
      ele.click()          
      // a タグを削除する ele.remove()        
    });
  }, 

ここに画像の説明を挿入

(3)追加:バイナリストリームイメージのダウンロード

 // バイナリストリームイメージファイルをダウンロード downLoadImg() {
     アクシオス({
        メソッド: 'get'、
        URL: `http://localhost:9527/download/img`,
        レスポンスタイプ: '配列バッファ',
        パラメータ: {
          id: 12
        }
      }).then(res => {
        var src = 'data:image/jpg;base64,' + btoa(new Uint8Array(res.data).reduce((data, byte) => data + String.fromCharCode(byte), ''))
       // this.srcImg = src // 画像表示 var a = document.createElement('a')
        a.href = src
        a.download = '2.jpg'
        クリック()
        削除()
      })
    } 

画像.png

これで、フロントエンドの vue+express によるファイルのアップロードとダウンロードの例の実装に関するこの記事は終了です。vue express のファイルのアップロードとダウンロードに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • ファイルアップロード(ユーザーアバターアップロード)を実現するVue+axios+Node+expressの詳しい解説

<<:  負のz-indexを持つ要素がクリックできない問題の解決策

>>:  表のセル間隔とセルパディングの違いの詳細な説明

推薦する

Docker のインストールと構成コマンドのコード例

Dockerのインストール依存パッケージをインストールする sudo yum install -y ...

パズル効果を実現するネイティブ js

この記事では、パズル効果を実現するためのネイティブjsの具体的なコードを参考までに共有します。具体的...

MySQL 8.0.19 インストール詳細チュートリアル (Windows 64 ビット)

目次MySQLを初期化するMySQL サービスをインストール + MySQL サービスを開始MySQ...

Vueの学習手順

目次1. v-text (v-instruction name = "variable&q...

ウォーターフォールレイアウト+ダイナミックレンダリングの実装

目次典型的なウォーターフォールウェブサイトウォーターフォールフローレイアウトの原則一般的な考え方具体...

Unicode における CJK (中国語、日本語、韓国語の統合表意文字) 文字の概要

CJK は CJK Unified Ideographs の略称で、「中国語、日本語、韓国語の統一表...

フロントエンドHTMLスキン変更機能の実装コード

透明を含む5つの肌の色を変更するには50行のコードが必要です最初にコードをお渡ししますので、ご自身で...

vue3 を使用したジグソーパズルゲームのリファクタリングの例

序文プロジェクト内のパズルゲーム(デジタル華容路とも呼ばれる)を再構築するのに 2 日かかりました。...

Ubuntu 18.04 に MySQL をインストールする (グラフィカル チュートリアル)

ヒント: 以下の操作はすべて root 権限で実行されます。 # MySQL がインストールされてい...

Docker+Jenkins+Gitlab+Djangoアプリケーションデプロイ実践の詳細な説明

1. 背景インターネット アプリケーションの急速な更新と反復という状況では、従来の手作業や単純なスク...

効率を向上できる Linux コマンドエイリアス 10 個のまとめ

序文Linux 環境で作業するエンジニアは、これらの面倒な命令とパラメータのコマンドラインにきっと驚...

JSはGMTとUTCのタイムゾーンを完全に理解しています

目次序文1. GMT GMTとはGMTの歴史2. UTC UTCとはUTC は次の 2 つの部分で構...

マウスのドラッグ効果を実現するJavaScript

この記事では、マウスドラッグ効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

ミニプログラムにより、製品属性の選択や仕様の選択が可能

この記事では、ミニプログラムで製品属性選択または仕様選択を実装するための具体的なコードを参考までに共...

パスワードログインなしのLinux構成スタンドアロンおよびフルディストリビューションの詳細なチュートリアル

目次1: 単一マシンのパスワードフリーログイン構成1. 仮想マシンのホスト名を設定する2. 仮想マシ...