java HttpURLConnection 发送文件和字符串信息
javaHttpURLConnection发送文件和字符串信息
以文件的形式传参
/** *通过拼接的方式构造请求内容,实现参数传输以及文件传输 * *@paramactionUrl访问的服务器URL *@paramparams普通参数 *@paramfiles文件参数 *@return *@throwsIOException */ publicstaticvoidpost(StringactionUrl,Mapparams,Map files)throwsIOException { StringBOUNDARY=java.util.UUID.randomUUID().toString(); StringPREFIX="--",LINEND="\r\n"; StringMULTIPART_FROM_DATA="multipart/form-data"; StringCHARSET="UTF-8"; URLuri=newURL(actionUrl); HttpURLConnectionconn=(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); //首先组拼文本类型的参数 StringBuildersb=newStringBuilder(); for(Map.Entry 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); } DataOutputStreamoutStream=newDataOutputStream(conn.getOutputStream()); outStream.write(sb.toString().getBytes()); InputStreamin=null; //发送文件数据 if(files!=null) { for(Map.Entry file:files.entrySet()) { StringBuildersb1=newStringBuilder(); sb1.append(PREFIX); sb1.append(BOUNDARY); sb1.append(LINEND); //name是post中传参的键filename是文件的名称 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()); InputStreamis=newFileInputStream(file.getValue()); byte[]buffer=newbyte[1024]; intlen=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(); //得到响应码 intres=conn.getResponseCode(); if(res==200) { in=conn.getInputStream(); intch; StringBuildersb2=newStringBuilder(); while((ch=in.read())!=-1) { sb2.append((char)ch); } } outStream.close(); conn.disconnect(); } //returnin.toString(); }
以数据流的形式传参
publicstaticStringpostFile(StringactionUrl,Mapparams,Map files) throwsException { StringBuildersb2=null; StringBOUNDARY=java.util.UUID.randomUUID().toString(); StringPREFIX="--",LINEND="\r\n"; StringMULTIPART_FROM_DATA="multipart/form-data"; StringCHARSET="UTF-8"; URLuri=newURL(actionUrl); HttpURLConnectionconn=(HttpURLConnection)uri.openConnection(); conn.setReadTimeout(6*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); //首先组拼文本类型的参数 StringBuildersb=newStringBuilder(); for(Map.Entry 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); } DataOutputStreamoutStream=newDataOutputStream(conn.getOutputStream()); outStream.write(sb.toString().getBytes()); InputStreamin=null; //发送文件数据 if(files!=null) { for(Map.Entry file:files.entrySet()) { StringBuildersb1=newStringBuilder(); sb1.append(PREFIX); sb1.append(BOUNDARY); sb1.append(LINEND); sb1.append("Content-Disposition:form-data;name=\"pic\";filename=\""+file.getKey()+"\""+LINEND); sb1.append("Content-Type:application/octet-stream;charset="+CHARSET+LINEND); sb1.append(LINEND); outStream.write(sb1.toString().getBytes()); //InputStreamis=newFileInputStream(file.getValue()); //byte[]buffer=newbyte[1024]; //intlen=0; //while((len=is.read(buffer))!=-1) //{ //outStream.write(buffer,0,len); //} //is.close(); outStream.write(file.getValue()); outStream.write(LINEND.getBytes()); } //请求结束标志 byte[]end_data=(PREFIX+BOUNDARY+PREFIX+LINEND).getBytes(); outStream.write(end_data); outStream.flush(); //得到响应码 intres=conn.getResponseCode(); if(res==200) { in=conn.getInputStream(); intch; sb2=newStringBuilder(); while((ch=in.read())!=-1) { sb2.append((char)ch); } System.out.println(sb2.toString()); } outStream.close(); conn.disconnect(); //解析服务器返回来的数据 returnParseJson.getEditMadIconResult(sb2.toString()); } else { return"UpdateiconFail"; } //returnin.toString(); }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!