java端代码
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.RequestContext;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.servlet.ServletRequestContext;
public class SendServlet extends HttpServlet {
private static final long serialVersionUID = -4332039959272188942L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/plain;charset=UTF-8");
resp.setCharacterEncoding("utf-8");
Map msgMap=new HashMap();
msgMap.put("retMsg","非法请求");
msgMap.put("retFlag","0");
try {
PrintWriter out = resp.getWriter();
out.write(JSONUtil.convertObjectToJSON(msgMap));
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/plain;charset=UTF-8"); // 设置响应页面字符编码
resp.setCharacterEncoding("utf-8");
RequestContext requestContext = new ServletRequestContext(req);
Map msgMap = new HashMap();
if (FileUpload.isMultipartContent(requestContext)) {
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
//设置单个上传文件的最大尺寸(5M)
fileUpload.setFileSizeMax(1024*1024*5);
// 定义文本参数的key,value
String paramKey = null, paramValue = null;
// 定义原图片接收
List
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
String actionUrl = "http://192.168.2.189/servlet/sendTopic" ;
Map params = new HashMap() ;
params.put ( "userId" , "2" ) ;
params.put ( "tiebaId" , "1" ) ;
Map 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") ;
}
}