JAVA WEBプロジェクトフォルダーのアップロードとダウンロードのソースコード

1. enctypeの紹介

enctype属性は、フォームデータをサーバーに送信する前にエンコードする方法を指定します。

enctypeの役割は、サーバーにリクエスト本文のMIMEタイプを通知することです(リクエストヘッダーのコンテンツタイプは同じです)。

1. 1つのenctypeには3つの値があります

価値

説明文

application / x-www-form-urlencoded

送信する前にすべての文字をエンコードします(デフォルト)

multipart / form-data

文字をエンコードしません。各フォームアイテムはパーツに分割されます

テキスト/プレーン

スペースは「+」プラス記号に変換されますが、特殊文字はエンコードされません。

1.当enctype = 'application / x-www-form-urlencoded'

 

2.当enctype = 'multipart / form-data'

 

 

リクエストの本文が変更されていることを確認しました。このリクエストボディは、マルチコンポーネントリクエストボディと呼ばれます。

マルチパートリクエストボディとは:各フォームアイテムをパートに分割することです。

リクエストヘッダーのコンテンツタイプ境界の後にランダムな文字列をセグメンテーション識別子として使用します

一般的なフォームアイテム:

// nameはテキストボックス内のnameの属性値を意味し、adminは入力したテキスト値です

Content-Disposition:form-data; name = "username"

管理者

ファイルフォームアイテム

//ファイル名はアップロードしたファイルの名前、コンテンツタイプはMIMEタイプ、asdasdasはファイルのコンテンツを意味します

Content-Disposition:form-data; name = "upload"; filename = "a.txt"

Content-Type:text / plain

asdasdas

3.当enctype = 'text / plain'

 

w3cによると、スペースは「+」のプラス記号になりますが、ここでは見つかりませんでした。getリクエストの場合のみ、スペースは「+」の記号になります。

トピックを入力してください

アップロードを完了するには、3つの必要条件が満たされている必要があります

フォームフォームを提供するには、メソッドはポストである必要があります。これは、getリクエストの転送データは通常2 kbであり、ブラウザーによって異なるためです。

フォーム属性enctypeはmultipart / form-dataである必要があります

入力タイプ=”ファイル”の入力入力フィールドを提供する

大まかな実装原理:enctypeの値がmultipart / form-dataの場合、ブラウザーは各フォーム項目を異なる部分に分割し、識別子を境界の値で分割します。 、最後のフォームアイテムの分割識別文字列の終わりは、あと2つ「-」、つまり終わりを意味します。サーバーはrequest.getHeader( "content-type")を使用して分割文字列を取得し、解析します。

 

コードの実装

1.開発環境

2つのサードパーティjarパッケージを準備する

commons-ioパッケージ

commons-uploadパッケージ

すべての依存パッケージ

コードの実装

ダウンロードの要件

2つのヘッドと1つのストリーム

コンテンツタイプ

Content-Typeは、返されるメッセージの非常に重要なコンテンツであり、ドキュメントのコンテンツがどのMIMEタイプに属しているかを示します。

ブラウザは、Content-Typeに従って、返されたメッセージ本文のコンテンツを表示する方法を決定します。

デフォルト値はtext / htmlです

request.getServletContext()。GetMimeType( "file name")を使用してMIMEタイプを取得できます。

コンテンツの処分

Content-dispositionはMIMEプロトコルの拡張機能で、添付ファイルの表示方法をMIMEユーザーエージェントに指示します。

デフォルト値はインラインです。つまり、ブラウザウィンドウで開きます。

サーバーがクライアントブラウザーにファイルを送信するとき、ブラウザーでサポートされているファイルタイプの場合、通常、txt、jpgなどのブラウザーによってファイルが直接開かれ、ブラウザーに直接表示されます。

ユーザーに保存を促す必要がある場合は、処理にContent-Dispositionを使用し、添付ファイルを追加することが重要です。

例:Content-Disposition:attachment; filename = xxx、ブラウザはダウンロードボックスダイアログをアクティブにし、attachmentは添付ファイルを意味し、filnameの後にダウンロードボックスに表示されるファイル名が続きます。

流れ

ダウンロードはクライアントのバイトデータに応答することです!ファイルをバイト配列に変換するには、response.getOutputStream()を使用します

ブラウザに応答する。

コードは次のとおりです。このコードにはブレークポイント再開機能が実装されています。ユーザーはダウンロードプロセス中にダウンロードを一時停止して続行できるため、サーバーへの負荷が軽減されます。

 

ファイルリストをロードして、ダウンロードリストに表示します

バックエンドコードロジックはほとんど同じで、現在MySQL、Oracle、SQLをサポートしています。使用する前に、データベースを構成する必要があります。私が書いたこの記事を参照できます:http  : //blog.ncmem.com/wordpress/2019/08/12/java-http%E5%A4%A7%E6%96%87 %E4%BB%B6%E6%96%AD%E7%82%B9%E7%BB%AD%E4%BC%A0%E4%B8%8A%E4%BC%A0 /
ディスカッションのためのグループへようこそ "374992201 」

おすすめ

転載: www.cnblogs.com/songsu/p/12759845.html