HttpURLConnectionを利用してpostを送信してファイルのアップロードを要求します.

4781 ワード

ページでアップロードを実現するのは難しいことではなく、formを作成し、enctype=「multiad/form-data」を加えて、受信したものを書けばいいです.難しくないです.java.net.HttpURLConnectを使ってファイルをアップロードするなら、ちょっと面白いです.
1.まずservletを書いて、受信したHTTP情報を一つのファイルに保存して、フォームがどのような情報が入っているかを確認してください.
 
public void doPost(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       //     , HTTP        
       ServletInputStream  in=request.getInputStream();
       //   
       byte buffer[]=new byte[1024];
       FileOutputStream out=new FileOutputStream("d:\\test.log");
       int len=sis.read(buffer, 0, 1024);
       //           file.log   
       while( len!=-1 ){
           out.write(buffer, 0, len);
           len=in.readLine(buffer, 0, 1024);

       }
       out.close();
       in.close();
    }
 
フォームを一つください.
<form name=「upform」action=「uplload. do」method=「POST」enctype=「multiipad/form-data」パラメータ
ファイル1

もし私がパラメータで書いた内容がhello wordだったら、二つのファイルは簡単なtxtファイルで、アップロード後test.logsの中に次のようになります.
 
-----------------------------7da2e536604c8
Content-Disposition: form-data; name="username"

hello word
-----------------------------7da2e536604c8
Content-Disposition: form-data; name="file1"; filename="D:\haha.txt"
Content-Type: text/plain

haha
  hahaha
-----------------------------7da2e536604c8
Content-Disposition: form-data; name="file2"; filename="D:\huhu.txt"
Content-Type: text/plain

messi 
huhu
-----------------------------7da2e536604c8--
法則を研究してみると、次のような特徴があります.
1.1行目は「--------------------7 d 92221 b 604 bc」で区切り記号として、「\r」で改行します.この7 d 92221 b 604 bc区切り子ブラウザは、ランダムに生成される.
2.2行目はContint Dispossition:form-dataです.name="file 2"filename=「D:\hu.txt」name=inputのname値に対応して、filenameはアップロードするファイル名(パスを含む)に対応しています.
3.第三行はファイルであればContentt-Type:text/plinがあります.ここにアップロードされているのはtxtファイルですので、text/playinです.もし着ているのがjpg画像なら、イメージ/jpgです.自分で試してみてもいいです.
そして、車を返して改行します.
4.以下はファイルまたはパラメータの内容または値です.ハローワーク
5.最後の一行は------------------------7 da 2 e 536604 c 8--、最後に二つが増えたことに注意します.
これらがあれば、HttpURLConnectionを使ってファイルアップロード機能を実現できます.
 
public void upload(){
		List<String> list  = new ArrayList<String>();  //       , :d:\haha.doc.         。        list.
		try {
			String BOUNDARY = "---------7d4a6d158c9"; //        
			URL url = new URL("http://localhost/JobPro/upload.do");
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			//   POST          
			conn.setDoOutput(true);
			conn.setDoInput(true);
			conn.setUseCaches(false);
			conn.setRequestMethod("POST");
			conn.setRequestProperty("connection", "Keep-Alive");
			conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
			conn.setRequestProperty("Charsert", "UTF-8"); 
			conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
			
			OutputStream out = new DataOutputStream(conn.getOutputStream());
			byte[] end_data = ("\r
--" + BOUNDARY + "--\r
").getBytes();// int leng = list.size(); for(int i=0;i<leng;i++){ String fname = list.get(i); File file = new File(fname); StringBuilder sb = new StringBuilder(); sb.append("--"); sb.append(BOUNDARY); sb.append("\r
"); sb.append("Content-Disposition: form-data;name=\"file"+i+"\";filename=\""+ file.getName() + "\"\r
"); sb.append("Content-Type:application/octet-stream\r
\r
"); byte[] data = sb.toString().getBytes(); out.write(data); DataInputStream in = new DataInputStream(new FileInputStream(file)); int bytes = 0; byte[] bufferOut = new byte[1024]; while ((bytes = in.read(bufferOut)) != -1) { out.write(bufferOut, 0, bytes); } out.write("\r
".getBytes()); // , in.close(); } out.write(end_data); out.flush(); out.close(); // BufferedReader URL BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (Exception e) { System.out.println(" POST !" + e); e.printStackTrace(); } }
ファイルのアップロードを受信すると、このブログの記事を閲覧することができます.