HttpURLConnection上传id,图片,文本

现在要在安卓端用HttpURLConnection往服务器上传图片和文本,但是得附带一个用户名,用key1=value1&key2=value2的形式,但是getResponseCode()为500,服务器没问题,可能是请求头写错Content-Type了,改为pplication/x-www-form-urlencoded"后报415如下,代码如下,请大家指导下一下吧
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setConnectTimeout(3000);//设置连接超时
// con.setReadTimeout(5000); //不设置读取超时时间了,因为上传在服务端保存的时间不确定
con.setRequestMethod("POST");
con.setRequestProperty("Connection", "Keep-Alive");
con.setRequestProperty("Charset", "UTF-8");
con.setRequestProperty("Content-Type",
"multipart/form-data; boundary=" + BOUNDARY);

如果想了解HttpURLConnection的用法的话,最好去看官方文档,或者去github搜相关demo, 或者google搜索HttpURLConnection upload picutres.
应该能得到很有价值的信息, 或者可靠的demo.

如果只是想实现上传需求的话,建议使用开源的网络库, API使用方便,做了了性能优化,而且稳定性好. 三年前,我了解到的开源库有okhttp, volley.
当然, 对于简单需求, 如果你希望项目轻, 不想引入外部依赖的话, 那还是使用标准API自己实现吧.

从上面代码中无法看出具体的问题所在
贴一段代码,可进行参考

 String BOUNDARY = "Boundary-b1ed-4060-99b9-fca7ff59c113";
String ENTER = "\r\n";

String filePath = ""; //文件路径
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
URL url = new URL(urlStr);

//以下是内容
//第一部分是文件
String part1 = "--" + BOUNDARY 
        + ENTER
        + "Content-Type: application/octet-stream" + ENTER
        + "Content-Disposition: form-data; filename=\"" + file.getName() + "\"; name=\"file\"" + ENTER + ENTER;

String param1="param1";
String param2="param2";

//第二部分为普通的参数
String part2 = 
        //参数1
        + ENTER  
        + "--" + BOUNDARY + ENTER  
        + "Content-Type: text/plain" + ENTER  
        + "Content-Disposition: form-data; name=\"param1\"" + ENTER + ENTER  
        + param1 + ENTER  
        + "--" + BOUNDARY

        //参数2
        + ENTER 
        + "Content-Type: text/plain" + ENTER  
        + "Content-Disposition: form-data; name=\"param2\"" + ENTER + ENTER  
        + param2 + ENTER  
        + "--" + BOUNDARY

        //有多余参数可再次继续添加...

        //最后结尾
        + "--";

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);;
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setUseCaches(false);
conn.setInstanceFollowRedirects(true);
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+BOUNDARY);
conn.setConnectTimeout(3000);
conn.connect();
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());

byte[] bytes = new byte[fis.available()];
fis.read(bytes);

dos.writeBytes(part1);
dos.write(bytes);
dos.writeBytes(part2);
dos.flush();
dos.close();
fis.close();

//如果服务器有返回信息,可通过此获取返回信息
InputStream is = conn.getInputStream();
byte[] b = new byte[1024];
int len;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while((len=is.read(b))>0) {
    bos.write(b, 0, len);
}
String result = bos.toString("UTF-8"); //result即为返回信息

主要实现是根据带文件的form表单提交的内容如下:
图片说明