Vue フォームのポストリクエストとサーブレットを組み合わせてファイルアップロード機能を実現する

Vue フォームのポストリクエストとサーブレットを組み合わせてファイルアップロード機能を実現する

フロントエンドテストページコード:

<テンプレート>
 <div>
  <input type="file" name="file" @change="change($event)">
 </div>
</テンプレート>
<スクリプト>
 エクスポートデフォルト{
  作成された(){
   this.path = this.$route.query;
   for (let i in this.path) {
    this[i] = decodeURIComponent(this.path[i]);
   }
  },
  方法:{
   変更(ev){
    ファイルをev.target.files[0]とします。
    size = file.size とします。
    name = file.name;とします。
    サイズが314572800より大きい場合
     this.$message.warning('アップロードされたファイルは300MBを超えることはできません');
     戻る;
    }
    formData を新しい FormData() にします。
    formData.append('ファイル',ファイル,名前)
    this.$axios.post('/JT3'+this.getddRecordDelete,formData,{
     ヘッダー:{"Content-Type":"multipart/form-data"}
    })。次に(データ=>{
     コンソールにログ出力します。
    })
   }
  }
 }
</スクリプト>
<スタイルスコープ>
</スタイル>

バックエンドサーブレット受信コード

パッケージ jt3.control.zygkh;
java.io.File をインポートします。
java.io.FileOutputStream をインポートします。
java.io.IOException をインポートします。
java.io.InputStream をインポートします。
java.util.List をインポートします。
javax.servlet.ServletException をインポートします。
javax.servlet.annotation.WebServlet をインポートします。
javax.servlet.http.HttpServlet をインポートします。
javax.servlet.http.HttpServletRequest をインポートします。
javax.servlet.http.HttpServletResponse をインポートします。
org.apache.commons.fileupload.FileItem をインポートします。 
org.apache.commons.fileupload.FileUploadException をインポートします。 
org.apache.commons.fileupload.disk.DiskFileItemFactory をインポートします。 
org.apache.commons.fileupload.servlet.ServletFileUpload をインポートします。
jtacc.filter.JTKit をインポートします。
jtacc.jtpub.DT をインポートします。 
@WebServlet(urlPatterns = "/upfile/file") 
パブリッククラスUploadServletはHttpServletを拡張します{
	プライベート静的最終long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest リクエスト、HttpServletResponse レスポンス) は ServletException、IOException をスローします {
		システム.out.println(11);
		this.doPost(リクエスト、レスポンス);
 }
 保護された void doPost(HttpServletRequest リクエスト、HttpServletResponse レスポンス) は ServletException、IOException をスローします {
 	String uri="/u/file/"+DT.getFormatDate("yyyyMMdd")+"/"; // パスを定義します String tmpPath=JTKit.getBaseDIR()+uri; // これは個人プロジェクト パスです。必要に応じてパスを定義します DiskFileItemFactory factory = new DiskFileItemFactory();
		factory.setRepository(new File(tmpPath));//一時ファイル保存パス ServletFileUpload fileUpload = new ServletFileUpload(factory);//コア操作オブジェクト fileUpload.setHeaderEncoding("utf-8");//文字化け防止コード try {
			// リアルタイムで変換を強制したい場合は、jar パッケージ (commons-fileupload-1.3.3.jar) をダウンロードする必要があります。
			リスト<FileItem> リスト = fileUpload.parseRequest(request);
			for (FileItem ファイルアイテム: リスト) {
				入力ストリーム in = fileItem.getInputStream();
				文字列ファイル名 = fileItem.getName();
				ファイルアイテムが null の場合
					System.out.println(ファイル名);
					長さ = 0;
					byte[]配列 = 新しいbyte[1024];
					FileOutputStream fos = 新しい FileOutputStream(tmpPath+ファイル名);
					while((len = in.read(array))!=-1){// fos.write(array,0,len); ごとに最大 1024 バイトを読み取ることができることを示します。
						fos.flush();
					}
					fos.close();
					in.close();
					ファイルアイテムを削除します。
					レスポンス.setCharacterEncoding("UTF-8");
					文字列 realPath = uri+ファイル名;
					レスポンス.getWriter().append(realPath);
				}
			}
		} キャッチ (FileUploadException e) {
			// TODO 自動生成されたキャッチブロック
			e.printStackTrace();
		}
 }
 
}

テスト結果

補足: サーブレットはフォームから送信されたデータを取得します

サーブレットの doPost メソッド内:

保護された void doPost(HttpServletRequest リクエスト、HttpServletResponse レスポンス) は ServletException、IOException をスローします {
}

フォーム データを取得するには、まず、中国語の文字化けの問題を防ぐために、リクエストのエンコードを「UTF-8」に設定する必要があります。

リクエスト.setCharacterEncoding("utf-8");

単一の文字列を取得する方法:

文字列 username = request.getParameter("username");

文字列配列を取得する方法:

文字列[] お気に入り = request.getParameterValues("お気に入り");

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • Vueは添付ファイルのアップロード機能を実装しました
  • Spring+Vue は UEditor リッチテキストを統合して画像添付ファイルをアップロードします
  • Vue パッケージアップロードサーバー更新 404 問題に対する 2 つの解決策
  • Vue+element+oss はフロントエンドのフラグメントアップロードとブレークポイント再開を実現します
  • vue-simple-uploader をベースに、ファイルセグメントアップロード、インスタントアップロード、ブレークポイント再開のグローバルアップロードプラグイン機能をカプセル化します。
  • Vueはvue-quill-editorリッチテキストエディタを使用し、画像をサーバーにアップロードします。
  • Vue2をベースにモバイル画像アップロード、圧縮、ドラッグアンドドロップソート、ドラッグアンドドロップ削除機能を実現
  • vue+vantで写真をアップロードする際の注意点
  • Vueは写真を切り取ってアップロードすることを実現
  • Vueで複数の添付ファイルをアップロードする実装例

<<:  Dockerコンテナでアプリケーションサービスを自動的に起動する方法の例

>>:  MAC で MySQL の初期パスワードを変更する方法

推薦する

Nginx リバースプロキシの例の詳細な説明

1. リバースプロキシの例1 1. 効果を達成する(1)ブラウザを開き、www.123.comと入力...

mysql 8.0.16 winx64.zip インストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.16 winx64.zipのインストールと設定方法の具体的なコード...

MySQL 8.0.15 圧縮版インストール グラフィック チュートリアル

この記事では、参考までにMySQL 8.0.15圧縮版のインストール方法を紹介します。具体的な内容は...

MySQL のスケジュールされた完全なデータベースバックアップ

目次1. MySQLデータのバックアップ1.1、データをバックアップするためのmysqldumpコマ...

Docker Compose のインストールと使用手順

目次1. Docker Compose とは何ですか? 2. Docker Composeのインスト...

Docker イメージ管理の一般的な操作コード例

ミラーリングも Docker のコアコンポーネントの 1 つです。ミラーリングはコンテナ操作の基盤で...

Vueプロジェクトが完了した後にプロジェクトを最適化する方法の例

目次1. 開発モードとリリースモードに異なるパッケージエントリポイントを指定する2. 外部CDNリソ...

SQL で行の最大値または最小値を取得する方法

元データと対象データSQL文を実装する(最大) 選択 店、 月、 最大(dz,fz,sp) が最大値...

MacにHomebrewをインストールする際の注意点

最近、Xiao Ming は新しい Mac を購入し、独自のブログ Web サイトを構築したいと考え...

一般的なMySQLコマンドの概要

mysqlrootパスワードの設定と変更初めて MySQL データベースに入ります。 !環境変数にm...

Nginx ベースの HTTPS ウェブサイトを設定する手順

目次序文:暗号化アルゴリズム: 1. HTTPS の概要2. NginxはHTTPSウェブサイト設定...

CSSで背景ぼかしを設定する方法

ページを作成するときに、ページの見栄えを良くするために、背景画像を設定する必要があることがよくありま...

vscode で Prettier Code プラグインを使用する詳細なチュートリアル

なぜprettierを使うのですか?大企業では、フロントエンド開発コードに独自のコード標準がある場合...

node-media-serverを使用してシンプルなストリーミングメディアサーバーを構築する

node-media-server を使用するプロセスの一部を記録します。この記事の環境はWindo...

ウェブページサイズに関する調査

<br />統計によると、Web ページの平均サイズは 2003 年以降 3 倍に増加し...