Vue+Element+Springboot画像アップロードの実装例

Vue+Element+Springboot画像アップロードの実装例

最近、たまたま vue+springboot のフロントエンドとバックエンドの分離プロジェクトに触れ、画像アップロード機能を使って記録しました。

フロントエンドで送信されるフォームコードの一部

<el-form-item label="カバー画像">
                <el-upload v-model="dataForm.title"
                        クラス="アバターアップローダー"
                        :limit="1"
                        リストタイプ="絵カード"
                        :on-preview="ハンドルPictureCardPreview"
                        複数
                        :http-request="アップロードファイル"
                        :on-remove="ハンドル削除"
                        :on-change='changeUpload'
                        :file-list="画像">
                    <i class="el-icon-plus"></i>
                </el-アップロード>
            </el-form-item>

el-upload の要素の説明:

  • on-preview: ファイルリストでアップロードされたファイルをクリックしたときに発生するイベント
  • on-remove: ファイルを削除するときに呼び出されるメソッド
  • on-change: ファイルの状態が変更されたときのイベント。ファイルの追加時、アップロードが成功したとき、またはアップロードが失敗したときに呼び出されます。
  • ファイルリスト: アップロードされたファイルリストまたはデフォルトのエコーデータ表示レンダリング

再実行とデータ

戻る {
                画像: [{name: 'food.jpg', url: 'upload/2022/web/20210329194832973.png'}],
                画像URL: ''、
                fileList: [], // ファイルアップロードデータ(複数のファイルを1つにまとめたもの)
                ダイアログイメージURL: ''、
                ダイアログ表示: false、
                オプション: [],
                コンテンツ: ''、
                エディターオプション: {},
                表示: 偽、
                データフォーム: {
                    id: 0,
                    タイトル: ''、
                    コンテンツ: ''、
                    bz: ''
                },
                tempKey: -666666 // 一時キー。ツリー項目の半選択状態をバックエンド インターフェイスに渡すことができない問題を解決するために使用されます。# 最適化対象}

画像のプレビュー、アップロード、削除

changeUpload: function(file, fileList){//プレビュー画像 this.fileList = fileList;
            },
            アップロードファイル(ファイル){

            },
            handleRemove(ファイル、ファイルリスト) {
            },
            handlePictureCardPreview(ファイル) {
                this.dialogImageUrl = file.url;
                this.dialogVisible = true;
            },

ここでは、カバー画像を 1 つアップロードし、その他のフォーム コンテンツを追加するだけなので、fomrData オブジェクトを使用して送信します。

// フォーム送信 dataFormSubmit() {
                const form = new FormData() // FormData オブジェクト form.append('file', this.fileList);
                フォームにタイトルを追加します。
                form.append('content', this.$refs.text.value);
                this.$refs['dataForm'].validate((valid) => {
                    (有効)の場合{
                        this.$http({
                            url: this.$http.adornUrl(`/sys/inform/${!this.dataForm.id ? 'save' : 'update'}`),
                            メソッド: 'post'、
                            データ:フォーム
                        }).then(({データ}) => {
                            if (データ && データコード === 0) {
                                this.$メッセージ({
                                    メッセージ: 「操作は成功しました」
                                    タイプ: '成功'、
                                    期間: 1500、
                                    閉じる時: () => {
                                        this.visible = false
                                        this.$emit('refreshDataList')
                                    }
                                })
                            } それ以外 {
                                this.$message.error(データ.msg)
                            }
                        })
                    }
                })
            }

バックグラウンドでは、HttpServletRequestリクエストを通じて - WebUtils

.getNativeRequest(request, MultipartHttpServletRequest.class) はファイルリクエストを取得し、サーバーまたはローカルにファイルを解析します。

/**
 * @著者 lyy
 * PCバックグラウンドアップロードファイルを保存する*/
@RequestMapping(値 = "sys/file/save", メソッド = {RequestMethod.POST, RequestMethod.GET})
@トランザクション
パブリック R 保存(HttpServletRequest リクエスト) {
    文字列分類 = request.getParameter("分類");
    マルチパートHttpServletRequest マルチパートリクエスト = WebUtils
            .getNativeRequest(リクエスト、MultipartHttpServletRequest.class);
    文字列ファイル名 = "";
    マルチパートリクエストが null の場合
        イテレータ<String> names = multipartRequest.getFileNames();
        (names.hasNext()) の間 {
            リスト<MultipartFile> files = multipartRequest.getFiles(names.next());
            if (files != null && files.size() > 0) {
                for (MultipartFile ファイル: ファイル) {
                    ファイル名 = file.getOriginalFilename();
                    文字列 SUFFIX = FileUtil.getFileExt(fileName);
                    ファイル uFile = new File();
                    uFile.setFileName(ファイル名);
                    uFile.setClassify(分類する);
                    uFile.setCreateTime(新しい日付());
                    uFile.setFileType(SUFFIX);
                    文字列 uuid = FileUtil.uuid();
                    試す {
                        uFile.setPath(uploadFile(uuid,file) +uuid+"."+SUFFIX);
                    } キャッチ (IOException e) {
                        e.printStackTrace();
                    }
                     fileService.save(uFile);
                }
            }
        }
    }
    R.ok() を返します。
}

ローカルにファイルをアップロードするための静的メソッド

/**
     * ファイルをアップロード *@author lyy
     * @param ファイル
     * @戻る
     * @throwsIOException 例外をスローします
     * @throwsIllegalStateException 例外をスローします
     */
    パブリック静的文字列 uploadFile(文字列 uuid、MultipartFile ファイル) は IllegalStateException、IOException をスローします {
        文字列 defaultUrl = MyFileConfig.getFilePath();
        文字列ディレクトリ = java.io.File.separator;
        文字列 realUrl = defaultUrl + ディレクトリ;
        java.io.File 実ファイル = 新しい java.io.File(実 URL);
        実際のファイルが存在する場合 (!realFile.exists() && !realFile.isDirectory()) {
            実際のファイル。
        }
        文字列 fullFile = realUrl + uuid + "." + FileUtil.getFileExt(file.getOriginalFilename());
        file.transferTo(新しい java.io.File(fullFile));
        文字列 relativePlanUrl = ディレクトリ;
        relativePlanUrl.replaceAll("\\", "/") を返します。
    }

Vue+Element+Springboot イメージアップロードの実装例についてはこれで終了です。Vue+Element+Springboot イメージアップロードの関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue+SSMは画像アップロードのプレビュー効果を実現します
  • 写真をアップロードして顔を認識する Vue+axios サンプルコード
  • Vue で axios を使用して画像をアップロードするときに発生する問題
  • Vue.jsクラウドストレージで画像アップロード機能を実現
  • Vue ページ内の公開マルチタイプ添付画像アップロード領域と適用可能な折りたたみパネル (サンプルコード)

<<:  CSS 背景画像を設定するための 6 つの興味深いヒント

>>:  html の img src="" で js 関数または js 変数を呼び出して、画像パスを動的に指定します。

推薦する

MySQLはbinlogを通じてデータを復元する

目次MySQL ログファイルバイナリログBinlogログがオンになっていますログ記録を有効にする方法...

どのような種類の MYSQL 接続クエリを知っていますか?

序文クエリ情報が複数のテーブルから取得される場合、クエリのためにこれらのテーブルを結合する必要があり...

vue3 の setUp とリアクティブ関数の使用方法の詳細な説明

1. いつsetUpを実行するかvue3 ではメソッドを正常に使用できるようになったことは誰もが知っ...

MySQLデータベースのマスタースレーブレプリケーションの長い遅延に対する解決策

序文MySQL マスター スレーブ レプリケーションの遅延は、業界では長年の問題となっています。遅延...

MySQLでインデックスエラーが発生する状況について簡単に説明します

以下に、トレーニング機関からのヒントと私自身の要約をいくつか示します。以下のインデックスの内容を説明...

MySQL 8.0 アップグレード体験

目次序文1. まず、既存のバージョンの MySQL を完全にアンインストールします。 2. deb ...

docker と docker-compose による eureka の高可用性の実現の詳細な説明

最近、新しいプロジェクトでは springcloud と docker が使用されています。この 2...

vue3.0 で要素を使用するための完全な手順

序文: vue3.0の要素フレームワークを使用します。要素はvue2.0をサポートしており、vue3...

MySql COALESCE 関数の使用コード例

COALESCE は、各パラメータ式 (expression_1、expression_2、...、...

MySQL 5.6.23 のインストールと設定環境変数のチュートリアル

この記事では、MySQL 5.6.23のインストールと設定のチュートリアルを参考までに紹介します。具...

n 個のコンテナ要素による無限スクロールの実装コード

シナリオ最大 10000 要素のリストを正しくレンダリングする方法。無限ドロップダウン読み込みテクノ...

Vue3+el-tableは行と列の変換を実現します

目次行と列の変換トランスクリプトの構成を分析するvue3 + el-table で作成されたトランス...

ServerSocketのデフォルトIPバインディングの実装プロセスの詳細な説明

開発中にサーバーを起動する必要がある場合、ローカルテストではポートを直接書き込み、実際の環境ではバイ...

Win10 構成 Tomcat 環境変数チュートリアル図

設定する前に、次の操作を行う必要があります。 1. まずjdk bloggerをインストールします。...