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 の初期パスワードを変更する方法

推薦する

忘れられたボタンタグ

注:この記事は他の人によって翻訳されていますが、考えるべき点が多く、理解しにくい点もあると感じていま...

Win10 での MySQL 8.0.15 のインストールと設定のチュートリアル

最近私が学んでいるのは MySQL の知識なので、MySQL をインストールすることが非常に重要です...

Vue は div の高さをドラッグ可能にします

この記事では、divのドラッグ可能な高さを実現するためのVueの具体的なコードを参考までに共有します...

JavaScript フォーム検証の例

HTML フォームは、名前、電子メール アドレス、場所、年齢などのユーザー情報を収集するためによく使...

Vueは要素ツリーコントロールを通じてツリーテーブルを実装します

目次実装効果図依存関係をインストールするカスタムツリーコントロールその他の実装要約するVueでは、要...

VUE+SpringBootはページング機能を実装します

この記事では主に、Vue + SpringBoot でページ分割されたリストデータを実装する方法を紹...

MySQLのconcat関連関数の詳細な説明

1. concat() 関数機能: 複数の文字列を 1 つの文字列に連結する構文: concat(s...

ウェブサイト開発におけるフロントエンド開発者とアーティストの知識の違い

概要: 多くの企業、特にインターネット Web サイトを主な事業とする企業のほとんどが、「アーティス...

小さなアイコンのフロントエンド処理ソリューションのグラフィカルな説明

序文この記事を始める前に、複数選択の質問をしてみましょう。フロントエンド開発でビルド ツールを使用す...

Tomcat コアコンポーネントとアプリケーションアーキテクチャの詳細な説明

目次Web コンテナとは何ですか? HTTP の性質HTTP リクエスト応答の例クッキーとセッション...

Dockerでイメージ情報を表示する方法

この記事では、Dockerでイメージ情報を表示する方法を学ぶ必要があります。 1. imagesコマ...

iframe の多層ネスト、無制限のネスト、高度に適応したソリューション

ページ A、B、C の 3 つがあります。ページ A にはページ B が含まれ、ページ B にはペー...

MySQLの共通関数の概要

序文: MySQL データベースは、よく使用される集計関数、日付および文字列処理関数など、幅広い関数...

Tomcat 例外の解決方法 (リクエスト ターゲットに無効な文字が見つかりました。有効な文字は RFC 7230 および RFC 3986 で定義されています)

1. シナリオ表示Tomcat ログに次の例外情報が時々報告されます。何が起こっているのでしょうか...

CSS でより美しいリンクプロンプト効果をカスタマイズする方法

提案: コードをできるだけ手書きすると、学習の効率と深さを効果的に向上できます。デフォルトでは、&l...