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 変数を呼び出して、画像パスを動的に指定します。

推薦する

ウェブサイトのコンテンツの一部を傍受するための iframe を実装するためのアイデアとコード

コードをコピーコードは次のとおりです。 <div スタイル="幅:630px;高さ:...

単一テーブルのMySQLバックアップとリストアに関する簡単な説明

A. MySQLバックアップツールxtrabackupのインストール1. Percona 公式 xt...

JavaScript オブジェクトの組み込みオブジェクト、値型、参照型の説明

目次物体オブジェクト定義オブジェクトのメンバーを反復処理するJS組み込みオブジェクト数学オブジェクト...

MySQL 5.7 でルートパスワードを変更する方法

MySQL 5.7 以降では、多くのセキュリティ更新が追加されました。旧バージョンのユーザーは慣れて...

8 JSのreduce使用例とreduce操作方法

reduceメソッドは配列の反復メソッドです。 mapやfilterとは異なり、 reduceメソッ...

Linux で MySQL をインストールする簡単な方法

Linux に MySQL をインストールする方法をオンラインで検索すると、多くの方法が表示されまし...

高品質なウェブページのデザイン方法 高品質なウェブページ(画像とテキスト)のデザイン経験

オープンプラットフォームの増加に伴い、そこから派生するさまざまなアプリケーションサービスも増加傾向に...

MySQLテーブルのテーブル構造を素早く変更する方法

MySQL テーブルのテーブル構造をすばやく変更する - 「MySQL 管理」から抜粋 ALTER ...

SQL 結合クエリの内部結合、外部結合、クロス結合の違いの詳細な説明

データベースを使用するアプリケーションを開発する場合、必然的にユニオンクエリを使用する必要があります...

MySQL で重複時間を削除して時間差を計算する実装

目次必要:ドライブ:アイデア:成し遂げる:個人的には、実際の開発ではストアド プロシージャの使用はお...

JavaScript Canvas で三目並べゲームを実装

この記事では、JavaScript Canvasで三目並べゲームを実装するための具体的なコードを参考...

MySQL エラー: ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションの解決策を再起動してください

問題を見つける最近、以前のデータを入力していたときに、プログラムが突然次のエラーを報告しました。 [...

初心者のための HTML コーディングガイドライン 30 選

1. HTMLタグは常に閉じる前のページのソース コードでは、次のような記述がよく見られます。 &l...

モバイルブラウザが位置をサポートしない場合の解決策: 修正

具体的な方法は以下の通りです。 CSSコードコードをコピーコードは次のとおりです。 .wap_bot...

Mysql の一時テーブルとパーティションテーブルの違いの詳細な説明

一時テーブルとメモリテーブルメモリ テーブルとは、メモリ エンジンを使用するテーブルを指します。テー...