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

推薦する

Linux ドライバ開発でよく使われる関数 copy_from_user open read write の詳細な説明

目次Linux ドライバーの共通機能 (copy_from_user open read write...

ウェブページの読み込み速度を上げる簡単なヒント

Web ページの読み込み速度は、Web サイトの品質を評価するための重要な指標です。その理由は、ほと...

Nginxはリバースプロキシを使用して負荷分散プロセス分析を実装します

導入dockerコンテナとdocker-composeに基づいて、Linux環境でのdockerの基...

Vueはプログレスバーの変更効果を実現します

この記事ではVueを使ってプログレスバーの変更を簡単に実装してみましたので参考にしてください。具体的...

Vue で計算プロパティを使用する際の知識ポイントのまとめ

計算されたプロパティ場合によっては、テンプレートにロジックを詰め込みすぎると、テンプレートが重くなり...

MySql 5.7.17 winx64 のインストールと設定に関する詳細なチュートリアル

1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカウ...

Vue は PDF ファイルのオンライン プレビューを実装します (pdf.js/iframe/embed を使用)

序文現在、私はコースウェア PPT のオンライン プレビューを必要とする高品質のコースに取り組んでい...

組み込み Linux 開発環境で ping と nfs を構築するためのソリューション

1. 組み込みソフトウェアレベル 1) ブートローダ -> ブートローダ組み込みシステム全体の...

最新バージョンMySQL5.7.19 解凍版インストールガイド

MySQL バージョン: MySQL Community Edition (GPL) ------ ...

HTML リスト タグ dl、ul、ol の使用例

コードをコピーコードは次のとおりです。 <!--リストタグ: <dl>: 階層リス...

mysql8.0.11 winx64 のインストールと設定方法のグラフィック チュートリアル (win10)

mysql 8.0.11 winx64のインストールチュートリアルは以下のように記録され、みんなと...

Linux および Unix サーバーのセキュリティを強化する方法

ネットワーク セキュリティは非常に重要なトピックであり、サーバーはネットワーク セキュリティにおける...

MySQL データベースは XA 仕様をどのように実装しますか?

MySQL 一貫性ログMySQL データベースの電源が切れた場合、コミットされていないトランザクシ...

Mysqlリモート接続構成を実装する2つの方法

Mysqlリモート接続構成を実装する2つの方法会社で働いていると、誰かのコンピュータに保存されている...

収集する価値のあるCSS命名規則(ルール) よく使われるCSS命名規則

CSS命名規則(ルール) よく使われるCSS命名規則ヘッダー: ヘッダーコンテンツ: コンテンツ/コ...