files = new HashMap() ;
files.put ( "2.png" , new File("D:\\2.png")) ;
files.put ( "1.png" , new File("D:\\1.png")) ;
try
{
String str = post( actionUrl ,params , files ) ;
System.out.println ( "str--->>>" + str ) ;
}
catch ( Exception e )
{
}
}
public static String post( String actionUrl ,Map < String , String > params , Map < String , File > files )
throws IOException
{
String BOUNDARY = java.util.UUID.randomUUID ( ).toString ( ) ;
String PREFIX = "--" , LINEND = "\r\n" ;
String MULTIPART_FROM_DATA = "multipart/form-data" ;
String CHARSET = "UTF-8" ;
URL uri = new URL ( actionUrl ) ;
HttpURLConnection conn = ( HttpURLConnection ) uri
.openConnection ( ) ;
conn.setReadTimeout ( 5 * 1000 ) ; // 缓存的最长时间
conn.setDoInput ( true ) ;// 允许输入
conn.setDoOutput ( true ) ;// 允许输出
conn.setUseCaches ( false ) ; // 不允许使用缓存
conn.setRequestMethod ("POST") ;
conn.setRequestProperty ( "connection" , "keep-alive" ) ;
conn.setRequestProperty ( "Charsert" , "UTF-8" ) ;
conn.setRequestProperty ( "Content-Type" , MULTIPART_FROM_DATA+ ";boundary=" + BOUNDARY ) ;
// 首先组拼文本类型的参数
StringBuilder sb = new StringBuilder ( ) ;
for ( Map.Entry < String , String > entry : params.entrySet ( ) )
{
sb.append ( PREFIX ) ;
sb.append ( BOUNDARY ) ;
sb.append ( LINEND ) ;
sb.append ( "Content-Disposition: form-data; name=\""
+ entry.getKey ( ) + "\"" + LINEND ) ;
sb.append ( "Content-Type: text/plain; charset="
+ CHARSET + LINEND ) ;
sb.append ( "Content-Transfer-Encoding: 8bit" + LINEND ) ;
sb.append ( LINEND ) ;
sb.append ( entry.getValue ( ) ) ;
sb.append ( LINEND ) ;
}
DataOutputStream outStream = new DataOutputStream (conn.getOutputStream ( ) ) ;
outStream.write ( sb.toString ( ).getBytes ( ) ) ;
// 发送文件数据
if ( files != null )
for ( Map.Entry < String , File > file : files.entrySet ( ) )
{
StringBuilder sb1 = new StringBuilder ( ) ;
sb1.append ( PREFIX ) ;
sb1.append ( BOUNDARY ) ;
sb1.append ( LINEND ) ;
sb1.append ( "Content-Disposition: form-data; name=\"file\"; filename=\""
+ file.getKey ( ) + "\"" + LINEND ) ;
sb1.append ( "Content-Type: application/octet-stream; charset="
+ CHARSET + LINEND ) ;
sb1.append ( LINEND ) ;
outStream.write ( sb1.toString ( ).getBytes ( ) ) ;
InputStream is = new FileInputStream (
file.getValue ( ) ) ;
byte [ ] buffer = new byte [ 1024 ] ;
int len = 0 ;
while ( ( len = is.read ( buffer ) ) != - 1 )
{
outStream.write ( buffer , 0 , len ) ;
}
is.close ( ) ;
outStream.write ( LINEND.getBytes ( ) ) ;
}
// 请求结束标志
byte [ ] end_data = ( PREFIX + BOUNDARY + PREFIX + LINEND ).getBytes ( ) ;
outStream.write ( end_data ) ;
outStream.flush ( ) ;
// 得到响应码
int res = conn.getResponseCode ( ) ;
InputStream in = conn.getInputStream ( ) ;
StringBuilder sb2=null;
if ( res == 200 )
{
int ch ;
sb2 = new StringBuilder ( ) ;
while ( ( ch = in.read ( ) ) != - 1 )
{
sb2.append ( ( char ) ch ) ;
}
}
outStream.close ( ) ;
conn.disconnect ( ) ;
return new String(sb2.toString().getBytes("ISO-8859-1"),"UTF-8") ;
}
}