Android中的HTTPComponents多部分/表单数据

Android中的HTTPComponents多部分/表单数据,android,android-networking,apache-httpcomponents,Android,Android Networking,Apache Httpcomponents,如何使用Apache HTTPComponents在POST查询中发送文件?一种可能的解决方案是自己生成HTTP头,如下所述-(请参阅“多部分消息”) 我写了这样的函数。也许它写得不好,但效果很好 private static final String REQUEST\u BOUNDARY=“somethingUniqueForYourQuery”; 私有静态字符串sendRequest(字符串url、字符串方法、字符串参数、文件文件、字符串文件字段){ HttpURLConnection ht

如何使用Apache HTTPComponents在POST查询中发送文件?

一种可能的解决方案是自己生成HTTP头,如下所述-(请参阅“多部分消息”)

我写了这样的函数。也许它写得不好,但效果很好

private static final String REQUEST\u BOUNDARY=“somethingUniqueForYourQuery”;
私有静态字符串sendRequest(字符串url、字符串方法、字符串参数、文件文件、字符串文件字段){
HttpURLConnection httpConn=null;
StringBuilder httpContent=新的StringBuilder();
字符串lineEnd=“\r\n”;
字符串双连字符=“--”;
字节[]文件内容=新字节[0];
int fileSize=0;
//正在尝试读取文件
如果(文件!=null){
试一试{
FileInputStream FileInputStream=新的FileInputStream(文件);
追加(两个连字符+请求边界+行结束);
httpContent.append(“内容处置:表单数据;名称=\”“+fileField+”\“文件名=\”“+file.getName()+“\”“+lineEnd”);
httpContent.append(lineEnd);
fileSize=fileInputStream.available();
fileContent=新字节[文件大小];
读取(文件内容,0,文件大小);
fileInputStream.close();
}
捕获(例外e){
Log.d(DEBUG_标记,“异常发生:”+e.toString());
}
}
//正在尝试执行请求
试一试{
httpConn=(HttpURLConnection)新URL(URL).openConnection();
如果(httpConn!=null){
httpConn.setDoInput(真);
httpConn.setDoOutput(真);
httpConn.setUseCaches(假);
httpConn.setConnectTimeout(连接超时字符串);
httpConn.setRequestMethod(方法);
if(file!=null&&httpContent.length()>0){
httpConn.setRequestProperty(“连接”,“保持活动”);
httpConn.setRequestProperty(“内容类型”、“多部分/表单数据;边界=“+REQUEST\u边界”);
DataOutputStream dos=新的DataOutputStream(httpConn.getOutputStream());
如果(参数!=null){
dos.writeBytes(参数);
}
dos.writeBytes(httpContent.toString());
写入(文件内容,0,文件大小);
dos.writeBytes(lineEnd);
dos.writeBytes(两个连字符+请求\边界+两个连字符+行结束);
dos.flush();
dos.close();
}
else if(参数!=null){
PrintWriter out=新的PrintWriter(httpConn.getOutputStream());
打印输出(参数);
out.close();
}
httpConn.connect();
int response=httpConn.getResponseCode();
BufferedReader路;
if(httpConn.getErrorStream()==null){
rd=新的BufferedReader(新的InputStreamReader(httpConn.getInputStream());
}否则{
rd=新的BufferedReader(新的InputStreamReader(httpConn.getErrorStream());
}
StringBuffer sb=新的StringBuffer();
弦线;
而((line=rd.readLine())!=null){
sb.追加(第+行“\n”);
}
如果(rd!=null){
rd.close();
}
使某人返回字符串();
}否则{
Log.d(DEBUG_标记,“连接错误”);
}
}
捕获(例外e){
Log.d(DEBUG_标记,“异常发生:”+e.toString());
}
最后{
如果(httpConn!=null){
httpConn.disconnect();
}
}
返回null;
}