本文實例講述了java通過模擬post方式提交表單實現圖片上傳功能。分享給大家供大家參考,具體如下:
模擬表單html如下:
1
2
3
4
5
6
7
8
9
10
11
|
< form action = "up_result.jsp" method = "post" enctype = "multipart/form-data" name = "form1" id = "form1" > < label > < input type = "text" name = "name" value = "" /> </ label > < label > < input type = "file" name = "userfile" /> </ label > < label > < input type = "submit" value = "上傳" /> </ label > </ form > |
java代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
package com.yanek.util; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import javax.activation.MimetypesFileTypeMap; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class HttpPostUploadUtil { /** * @param args */ public static void main(String[] args) { String filepath= "E:\\ziliao\\0.jpg" ; String urlStr = "http://127.0.0.1:8080/minicms/up/up_result.jsp" ; Map<String, String> textMap = new HashMap<String, String>(); textMap.put( "name" , "testname" ); Map<String, String> fileMap = new HashMap<String, String>(); fileMap.put( "userfile" , filepath); String ret = formUpload(urlStr, textMap, fileMap); System.out.println(ret); } /** * 上傳圖片 * * @param urlStr * @param textMap * @param fileMap * @return */ public static String formUpload(String urlStr, Map<String, String> textMap, Map<String, String> fileMap) { String res = "" ; HttpURLConnection conn = null ; String BOUNDARY = "---------------------------123821742118716" ; //boundary就是request頭和上傳文件內容的分隔符 try { URL url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout( 5000 ); conn.setReadTimeout( 30000 ); conn.setDoOutput( true ); conn.setDoInput( true ); conn.setUseCaches( false ); conn.setRequestMethod( "POST" ); conn.setRequestProperty( "Connection" , "Keep-Alive" ); conn .setRequestProperty( "User-Agent" , "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)" ); conn.setRequestProperty( "Content-Type" , "multipart/form-data; boundary=" + BOUNDARY); OutputStream out = new DataOutputStream(conn.getOutputStream()); // text if (textMap != null ) { StringBuffer strBuf = new StringBuffer(); Iterator iter = textMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String inputName = (String) entry.getKey(); String inputValue = (String) entry.getValue(); if (inputValue == null ) { continue ; } strBuf.append( "\r\n" ).append( "--" ).append(BOUNDARY).append( "\r\n" ); strBuf.append( "Content-Disposition: form-data; name=\"" + inputName + "\"\r\n\r\n" ); strBuf.append(inputValue); } out.write(strBuf.toString().getBytes()); } // file if (fileMap != null ) { Iterator iter = fileMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String inputName = (String) entry.getKey(); String inputValue = (String) entry.getValue(); if (inputValue == null ) { continue ; } File file = new File(inputValue); String filename = file.getName(); String contentType = new MimetypesFileTypeMap() .getContentType(file); if (filename.endsWith( ".png" )) { contentType = "image/png" ; } if (contentType == null || contentType.equals( "" )) { contentType = "application/octet-stream" ; } StringBuffer strBuf = new StringBuffer(); strBuf.append( "\r\n" ).append( "--" ).append(BOUNDARY).append( "\r\n" ); strBuf.append( "Content-Disposition: form-data; name=\"" + inputName + "\"; filename=\"" + filename + "\"\r\n" ); strBuf.append( "Content-Type:" + contentType + "\r\n\r\n" ); out.write(strBuf.toString().getBytes()); 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); } in.close(); } } byte [] endData = ( "\r\n--" + BOUNDARY + "--\r\n" ).getBytes(); out.write(endData); out.flush(); out.close(); // 讀取返回數據 StringBuffer strBuf = new StringBuffer(); BufferedReader reader = new BufferedReader( new InputStreamReader( conn.getInputStream())); String line = null ; while ((line = reader.readLine()) != null ) { strBuf.append(line).append( "\n" ); } res = strBuf.toString(); reader.close(); reader = null ; } catch (Exception e) { System.out.println( "發送POST請求出錯。" + urlStr); e.printStackTrace(); } finally { if (conn != null ) { conn.disconnect(); conn = null ; } } return res; } } |
希望本文所述對大家Java程序設計有所幫助。