ホームページ ウェブフロントエンド Vue.js Vueにファイルアップロード機能を実装するにはどうすればよいですか?

Vueにファイルアップロード機能を実装するにはどうすればよいですか?

Jun 25, 2023 pm 01:38 PM
vue ファイルのアップロード 成し遂げる

Vue は現在フロントエンド開発で最も人気のあるフレームワークの 1 つで、ファイル アップロード機能の実装方法も非常にシンプルかつエレガントです。この記事では、Vueにファイルアップロード機能を実装する方法を紹介します。

  1. HTML 部分

次のコードを HTML ファイルに追加して、アップロード フォームを作成します。

<template>
  <div>
    <form ref="uploadForm" 
          enctype="multipart/form-data" 
          class="upload-form" 
          @submit.prevent="submitFile">
      <input type="file" 
             name="file" 
             id="file" 
             class="input-file"
             ref="file"
             @change="handleFileChange" />
      <label for="file" class="btn">选择文件</label>
      <!-- 进度条展示 -->
      <p v-if="showProgress">上传进度:{{ percent }} %</p>
      <button type="submit" 
              class="upload-btn" 
              :disabled="!selectedFile">上传</button>
    </form>
  </div>
</template>
ログイン後にコピー

上記のコードでは、フォームとタグを入力して作成します フォームをアップロードします。アップロード フォームの name 属性は、フォーム内のファイルのフィールド名を指定します。 enctype 属性はアップロードするファイルのタイプを示します。ここでは multipart/form-data タイプが使用されます。

ラベル label で、@click.prevent イベントを使用して入力ラベルのクリック イベントをトリガーし、それによってファイル選択ボックスをポップアップします。ここの @change イベントは、ファイルの選択をリッスンし、handleFileChange メソッドを呼び出して、フォーム内のファイル名を更新します。

  1. JavaScript 部分

JavaScript ファイルでは、Vue.js のカスタム コンポーネントと axios ライブラリを介してファイルのアップロードを実装する必要があります。

<script>
import axios from 'axios';

export default {
  data () {
    return {
      selectedFile: null,  // 选中的文件
      showProgress: false,  // 是否展示上传进度条
      percent: 0,    // 上传进度百分比
    }
  },
  methods: {
    handleFileChange (event) {
      this.selectedFile = event.target.files[0];
    },
    submitFile () {
      if (!this.selectedFile) return;
      // 新建 from 对象
      const formData = new FormData();
      formData.append('file', this.selectedFile, this.selectedFile.name);

      this.showProgress = true;
      const config = {
        headers: {
          'Content-Type': 'multipart/form-data'
        },
        onUploadProgress: progressEvent => {
          // 计算上传进度百分比
          this.percent = Math.round((progressEvent.loaded * 100) / progressEvent.total);
        },
      };
      axios.post('/api/upload', formData, config)
        .then((response) => {
          console.log(response);
          this.showProgress = false;  // 移除 progress 条
        })
        .catch((error) => {
          console.log(error);
          this.showProgress = false;
        });
    },
  },
};
</script>
ログイン後にコピー

ファイルの選択とアップロードを処理するメソッドで handleFileChange() メソッドと submitFile() メソッドを定義します。

  • handleFileChange メソッドは、ファイル選択イベントをリッスンし、選択されたファイルを保存します。
  • submitFile メソッドは、選択されたファイルが存在するかどうかを判断します。存在しない場合は、ファイルが直接返されます。 new FormData() を使用してフォームを構築し、append メソッドを通じて選択したファイルをフォームに追加します。3 番目のパラメーターはファイル名であることに注意してください。 axios.post は、文字列パラメータを介してファイルをアップロードするための API を指定します。アップロードに要求されるデータは、formData オブジェクトです。Headers の Content-Type 属性は、データ型を指定します。ここでは multipart/form-data タイプが使用され、アップロードはonUploadProgress イベントを通じて監視され、進行状況バーの動的な表示を実現します。

上記のコードでは、axios ライブラリを使用してファイルのアップロード操作を完了します。フロントエンド プロジェクトの package.json ファイルに axios の依存関係を追加します:

"axios": "^0.19.2"
ログイン後にコピー

import axios from 'axios'; を通じて導入して使用します。バックエンド API では、Multer ライブラリを使用してファイルのアップロードを処理します。 Multer はファイルのアップロードを処理する Node.js ライブラリであり、ファイルを処理してフォームとともに送信できます。

  1. バックエンド API 部分
const express = require('express');
const multer = require('multer');
const fs = require('fs');

const app = express();
const upload = multer({ dest: 'uploads/' });

app.post('/api/upload', upload.single('file'), (req, res) => {
  const file = req.file;
  if (!file) {
    const error = new Error('Please upload a file');
    error.httpStatusCode = 400;
    return next(error);
  }
  // 文件重命名
  const oldPath = file.path;
  const newPath = 'uploads/' + file.originalname;
  fs.rename(oldPath, newPath, (err) => {
    if (err) {
      console.error(err);
    }
  });
  res.send('File uploaded successfully');
});

const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`Server listening on port ${port}`);
});
ログイン後にコピー

アップロードされたファイルのフィールド名は、Multer の単一メソッドを通じて指定されます。Multer は、複数ファイルのアップロードとファイル タイプの制限のための他のメソッドも提供します. 操作を待ちます。アップロードが完了したら、ファイルを初期パスからアップロード ディレクトリに移動します。ファイル名の変更操作により、名前が一意になり、異なるファイル名をアップロードすることによる上書きを回避できます。

上記のコードでは、Express ライブラリを使用して Node.js サーバー アプリケーションを作成します。バックグラウンド プロジェクトの package.json ファイルに次の依存関係を追加します。

"express": "^4.17.1",
"multer": "^1.4.2"
ログイン後にコピー

import / require ステートメントを使用して、対応するモジュールを導入して使用します。

  1. 例外処理

ファイルのアップロード プロセス中に、ファイル サイズが制限を超えている、ファイル タイプが許可されていない、ネットワーク タイムアウトやサーバー エラーなどの異常な状況が発生する可能性があります。他の要因に応じて、クライアントとサーバーに対応する例外ハンドラーを作成する必要があります。

クライアント部分では、axios ライブラリを使用しているため、then メソッドと catch メソッドを直接使用して、アップロード リクエストによって返された Promise オブジェクトを処理し、アップロードが成功したときと失敗したときにそれぞれ操作を処理できます。 。この記事で提供されているコードでは、Promise.catch() を使用してプロセス実行中に例外を処理します。サーバー側では、例外ごとに実際の状況に応じて異なる処理が必要になります。

  1. 概要

この記事では、フロントエンドのファイル選択や進行状況の動的な表示など、Vue.js を使用してファイル アップロード操作を完了する方法を紹介しました。バックグラウンド API の準備や、アップロード プロセス中に発生する可能性のある異常事態への対処だけでなく、アップロード プロセス中のバーの表示も行います。

ファイルのアップロード機能は多くの Web アプリケーションに不可欠な機能ですが、Vue.js の axios ライブラリと Multer ライブラリを使用することで、シンプルかつ洗練されたアップロード処理を実現できます。

以上がVueにファイルアップロード機能を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

vue.jsでJSファイルを参照する方法 vue.jsでJSファイルを参照する方法 Apr 07, 2025 pm 11:27 PM

vue.jsでJSファイルを参照するには3つの方法があります。タグ;; mounted()ライフサイクルフックを使用した動的インポート。 Vuex State Management Libraryを介してインポートします。

VueでBootstrapの使用方法 VueでBootstrapの使用方法 Apr 07, 2025 pm 11:33 PM

vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。

VueでWatchの使用方法 VueでWatchの使用方法 Apr 07, 2025 pm 11:36 PM

Vue.jsの監視オプションにより、開発者は特定のデータの変更をリッスンできます。データが変更されたら、Watchはコールバック関数をトリガーして更新ビューまたはその他のタスクを実行します。その構成オプションには、すぐにコールバックを実行するかどうかを指定する即時と、オブジェクトまたは配列の変更を再帰的に聴くかどうかを指定するDEEPが含まれます。

怠zyなロードVUEとはどういう意味ですか? 怠zyなロードVUEとはどういう意味ですか? Apr 07, 2025 pm 11:54 PM

Vue.jsでは、Lazy Loadingを使用すると、コンポーネントまたはリソースを必要に応じて動的にロードすることができ、初期ページの読み込み時間を短縮し、パフォーマンスを改善できます。特定の実装方法には、&lt; Keep-Alive&gt;および&lt;コンポーネントは&gt;コンポーネント。怠zyなロードは、FOUC(スプラッシュ画面)の問題を引き起こす可能性があり、不必要なパフォーマンスのオーバーヘッドを避けるために怠zyなロードが必要なコンポーネントにのみ使用する必要があることに注意してください。

VUEのボタンに関数を追加する方法 VUEのボタンに関数を追加する方法 Apr 08, 2025 am 08:51 AM

HTMLテンプレートのボタンをメソッドにバインドすることにより、VUEボタンに関数を追加できます。 VUEインスタンスでメソッドを定義し、関数ロジックを書き込みます。

Vueはマーキー/テキストスクロール効果を実現します Vueはマーキー/テキストスクロール効果を実現します Apr 07, 2025 pm 10:51 PM

CSSアニメーションまたはサードパーティライブラリを使用して、VUEでマーキー/テキストスクロール効果を実装します。この記事では、CSSアニメーションの使用方法を紹介します。スクロールテキストを作成し、テキストを&lt; div&gt;をラップします。 CSSアニメーションを定義し、オーバーフローを設定します:非表示、幅、アニメーション。キーフレームを定義し、アニメーションの開始と終了時にtranslatex()を設定します。期間、スクロール速度、方向などのアニメーションプロパティを調整します。

Vueのバージョンを照会する方法 Vueのバージョンを照会する方法 Apr 07, 2025 pm 11:24 PM

Vue Devtoolsを使用してブラウザのコンソールでVueタブを表示することにより、Vueバージョンを照会できます。 NPMを使用して、「NPM List -G Vue」コマンドを実行します。 package.jsonファイルの「依存関係」オブジェクトでVueアイテムを見つけます。 Vue CLIプロジェクトの場合、「Vue -Version」コマンドを実行します。 &lt; script&gt;でバージョン情報を確認してくださいVueファイルを参照するHTMLファイルにタグを付けます。

VUEトラバーサルの使用方法 VUEトラバーサルの使用方法 Apr 07, 2025 pm 11:48 PM

Vue.jsには配列とオブジェクトを通過するには3つの一般的な方法があります。V-Forディレクティブは、各要素をトラバースしてテンプレートをレンダリングするために使用されます。 V-BindディレクティブをV-Forで使用して、各要素の属性値を動的に設定できます。 .mapメソッドは、配列要素を新しい配列に変換できます。

See all articles