質問:JavaWebでファイルをアップロードする方法は何ですか?

前回はファイルをダウンロードする方法についてお話しましたが、今回はさまざまな環境からファイルをアップロードする方法について簡単に説明します。

ファイルアップロードメソッド
Servlet2.5メソッド
Servlet3.0メソッド
SpringMVCメソッド
ケースプラクティス
Servlet2.5メソッド
ファイルアップロードには、フォアグラウンドページの書き込みとバックグラウンドサーバーコードの書き込みが含まれ、フォアグラウンドはファイルを送信し、バックグラウンドはファイルを受信して​​保存します。これが何です。完全なファイルのアップロード。

  1. 表紙

ファイルをアップロードするときは、ファイルをアップロードするためのインターフェイスがあります。まず、フォームが必要で、フォームのリクエスト方法はPOSTです。次に、フォームのenctypeを「multipart / form-data」、つまりenctype = "に設定する必要があります。 「multipart / form-data」は、フォームのMIMEエンコーディングを設定することを意味します。デフォルトでは、このエンコード形式は「application / x-www-form-urlencoded」であり、ファイルのアップロードには使用できません。multipart/ form-dataを使用した場合にのみ、ファイルデータを完全に送信できます。

上传文件 ファイル:
  1. バックグラウンドコモンズの使用-fileupload

まず、サードパーティのjarパッケージをインポートする必要があります。http://commons.apache.org/ダウンロードcommons-ioおよびcommons-fileupload2つのjarリソース。解凍してプロジェクトにインポートします。commons-fileupload.jarは、ファイルアップロードのコアパッケージです。commons-io.jarは、fileuploadの依存関係パッケージであり、ツールキットでもあります。

使用されるいくつかのコアクラスを紹介します

DiskFileItemFactory-ディスクスペースを設定し、一時ファイルを保存します。ただのツール

ServletFileUpload-ファイルアップロードのコアクラス。このクラスはリクエストを受信して​​解析します

ServletFileUpload.parseRequest(request); –リスト解析リクエスト

1. DiskFileItemFactoryファクトリクラスを作成し、一時ファイルとサイズを設定します

2. ServletFileUploadコアクラスを作成し、一時ファイルを受信して​​、要求された変換を実行します

3. ServletFileUploadクラスを介して元の要求を変換し、FileItemコレクションを取得します

4.コレクション内の各要素をトラバースして処理します

5.各要素が通常のフォームアイテムであるかどうかを判断し、そうである場合は、通常のフォームアイテムとして処理されます。

6.通常のフォームアイテムでない場合は、処理(アップロード)によって処理されるファイルです。

class UploadServlet the extends HttpServlet {public Private Long Final static serialVersionUID = 1L; protected void-Service(HttpServletRequest Request、HttpServletResponse Response)throws ServletException、IOException { //コーディングを設定し、ファイル名を取得できます中国語request.setCharacterEncoding( "UTF-8" ); // tomcatの下のアップロードディレクトリのパスを取得しますStringpath = getServletContext()。getRealPath( "/ upload"); //一時ファイルディレクトリStringtempPath = getServletContext()。getRealPath( "/ temp"); //チェックファイルアップロードリクエストがありますか// boolean isMultipart = ServletFileUpload.isMultipartContent(req); // 1. DiskFileItemFactoryファクトリクラスを宣言して、指定したディスクに一時ディレクトリを設定しますDiskFileItemFactory disk = new DiskFileItemFactory(1024 * 10、new File( tempPath));













// 2.上記の一時ファイルを受信するように、ServletFileUploadを宣言します。デフォルト値を使用することもできます
ServletFileUploadup = new ServletFileUpload(disk);
// 3. parse request
try { List list = up.parseRequest(request); if(list.size()> 0){ for(FileItem file:list){ //通常のフォームアイテムかどうかを判断しますif(file.isFormField()){ String fieldName = file.getFieldName(); //中国語が文字化けしているため、現時点では、データを取得するためのエンコード方法も指定する必要があります// String value = file.getString (); String value = file.getString( "UTF-8"); System.out.println(fieldName +“ =” + value); } else {//説明はファイルです//ファイル自体の名前を取得しますStringfileName = file.getName(); System.out.println(file.getFieldName()); //プロセスファイル名















fileName = fileName.substring(fileName.lastIndexOf( "")+ 1);
System.out.println( "old Name:" + fileName);
//名前を変更します
StringextName = fileName.substring(fileName.lastIndexOf( "。" ));
String newName = UUID.randomUUID()。toString()。replace( "-"、“”)+ extName;
//新しい名前を保存し、新しいファイルに書き込みます
file.write(new File(path + "/" + newName));
System.out.println( "ファイル名は:" + fileName);
System.out.println( "ファイルサイズは:" + file.getSize());
file.delete() ;
}
}
}
}キャッチ(FileUploadException E){ e.printStackTrace(); }キャッチ(例外E){ e.printStackTrace(); } } }






Servlet3.0モード
アノテーション@MultipartConfigを使用して、サーブレットをサポートファイルアップロードとして識別します。Servlet3.0は、multipart / form-data POSTリクエストをPartにカプセル化し、アップロードされたファイルをPartを介して操作します。

フロント

上传文件 名前:ファイル:

舞台裏

@WebServlet( "/ Upload")
@ MultipartConfig
public class UploadServlet the extends HttpServlet { Private Long Final static serialVersionUID = 1L; protected void-Service(HttpServletRequest Request、HttpServletResponse Response)throws ServletException、IOException { System.out.println( "upload files .. .. ”); //エンコーディングを設定しますrequest.setCharacterEncoding( "UTF-8"); //共通のフォームアイテムパラメータを取得しますStringuname = request.getParameter( "uname"); System.out.println(uname); //ファイルをアップロードします//パーツオブジェクトを取得しますrequest.getpart(name):nameは、ファイル要素のname属性値をPart part = request.getPart( "myfile");の形式で表します。//ファイルが保存されているパスを取得しますString path = request.getServletContext( ).getRealPath( "/"); //ファイル名を取得します















String fileName = part.getSubmittedFileName();
//アップロード
part.write(path + fileName);
} }

SpringMVCの方法
Pomファイルの変更によりcommons-fileuploadの依存関係が追加されます

commons-fileupload commons-fileupload 1.3.2

サーブレット-context.xml

10485760040964096

FileController

輸入はjava.io.File;輸入にjava.io.IOException;インポートするjavax.servlet.http.HttpServletRequest;輸入org.springframework.stereotype.Controller;輸入org.springframework.web.bind.annotation.RequestMapping。インポートorg.springframework.web.multipart.MultipartFile;インポートorg.springframework.web.multipart.MultipartHttpServletRequest;インポートorg.springframework.web.servlet.ModelAndView; @ControllerパブリッククラスFileController { @RequestMapping( "/ uploadFile 「)公衆のModelAndView uploadFile(HttpServletRequestのリクエスト){























ModelAndView MV =新規のModelAndView(); mv.setViewName(「結果」); MultipartHttpServletRequest MR =(MultipartHttpServletRequest)要求; MultipartFile multipartFile = mr.getFile(「ファイル」);文字列のパス=でrequest.getSession() .getServletContext()getRealPath(「アップロード」); System.out.printlnは(パス); (!ヌル= multipartFile && multipartFile.isEmpty()){場合は 、文字列fileNameに= multipartFile.getOriginalFilename()のtry { multipartFile.transferTo(新しいファイル(パス、ファイル名)); mv.addObject(「MSG」、「文件上传成功!」); }キャッチ(例外e){























mv.addObject( "msg"、 "upload failed!"); e.printStackTrace(); } } return mv; } }











フロントフォーム

送信

拡張機能〜MIME
MIME(多目的インターネットメール拡張機能)多目的インターネットメール拡張機能タイプ。特定の拡張子のファイルをアプリケーションで開くように設定する方法です。拡張子の付いたファイルにアクセスすると、ブラウザは自動的に指定したアプリケーションを使用して開きます。これは主に、クライアント定義のファイル名とメディアファイルを開く方法を指定するために使用されます。

これは、電子メール標準を拡張して以下をサポートできるようにするインターネット標準です。

非ASCII文字テキスト;非テキスト形式の添付ファイル(バイナリ、サウンド、画像など);複数の部分で構成されるメッセージ本文;非ASCII文字を含むヘッダー情報。

この規格は、RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC2049およびその他のRFCで定義されています。MIMEは、RFC822から変換されたRFC2822を改善します。これらの古い標準では、電子メール標準では、電子メールメッセージで7ビットASCII文字セット以外の文字を使用できないことが規定されています。このため、英語以外の文字メッセージやバイナリファイル、画像、音声、その他のテキスト以外のメッセージの一部は、元々電子メールで送信できません(MIMEは可能です)。MIMEは、さまざまなデータタイプを表すためのシンボリックメソッドを指定します。さらに、MIMEフレームワークはWorld Wide Webで使用されるHTTPプロトコルでも使用され、標準はインターネットメディアタイプに拡張されています。

さまざまなファイルに対応するMIMEタイプを表示するには、方法をお勧めします。例として、Tomcatを取り上げます。その下のweb.xmlファイルですべてのMIMEタイプを表示できます。Ctrl+ F検索を使用すると、知りたいファイルのMIMEタイプをすばやく見つけることができます。

おすすめ

転載: blog.csdn.net/dirft_lez/article/details/109173813