サーバーはクライアントのピクチャーを受け入れます

2561 ワード

サーバーを书いてクライアントの画像を受け取ってデータベースに保存する例を书いて、どのようにするか分からないで、结果はやはり基础がしっかりしていないで、httpに対してかばんをつかんで、HTTPの要求の情报を见て、急に多くのことを理解したと感じます.今またみんなが分かち合うことを望んで、助けがあることを望みます.
これはjspのアップロード画像のフォームで、コードは試験してきたので、テストのために必要です.
<html>
<head>
<title>File Uploading Form</title>
</head>
<body>
<h3>File Upload:</h3>
Select a file to upload: <br />
<form action="servlet/AcceptFileServlet" method="post" enctype="multipart/form-data">
<input type="file" name="image" size="50" />
<br />
<input type="submit" value="Upload File" />
</form>
</body>
</html>

もちろん対応するサーブレットが必要ですが、まずパッケージをつかんで彼が送ったものを見てみましょう.
バッグをつかんだ結果は次の図のようです.
上のリクエストのヘッダを見てみましょう.
Accept:ブラウザが処理できるタイプ.
Accept-Encoding:ブラウザはサーバーに自分がサポートできるタイプを教える
Cache-Control:要求とそれに従うキャッシュメカニズムの作成
Content-Type:multipart/form-dataはファイルリクエストのIDです
主に下記のRequest Payloadをご紹介します
------WebKitFormBoundaryVcgWIn 0 xGWgXTsCe:フォームリクエスト内容を分割するために使用されるもので、1つのフォームのリクエスト内容は、HTTPに表示されるのは大きく2つの部分に分けられます.
Content-Disposition:フォーム情報、フォーム名、フォーム転送ファイルの名前が表示されます
Content-type:フォームが転送するファイルのタイプ.
あとはアップロードするバイナリファイルです
これらのことを知って、file uploadというjarの中でファイルのアップロードをどのように実現したのかを知るべきでしょう.HTTPヘッダ情報を解析して判断し,カプセル化し,キューで得られたストリームを読み出し書き込み操作する.
FileuploadのFileItemはHTTPのRequest Payloadをカプセル化した結果であり,対応する方法もその情報をとる.
サーブレットのコードを添付します.
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 
		String tempPath = getServletContext().getRealPath("/temp");
		String photoPath = getServletContext().getRealPath("/photo");
		System.out.println(photoPath);
		// 5M 
		factory.setSizeThreshold(1024*1024*5);
		// 
		factory.setRepository(new File(tempPath));
		// 
		ServletFileUpload fileUpload = new ServletFileUpload(factory);
		try {
			// HTTP 
			List<FileItem> list = fileUpload.parseRequest(request);
			for (FileItem fileItem : list) {
				// 
				if(fileItem.getContentType().equals("image/png")){
					String filename = fileItem.getName();
					try {
						// 
						fileItem.write(new File(photoPath));
						System.out.println("yes");
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				// 
				else{
					System.out.println("no");
				}
				
			}
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}