键值对那是hTTP的头,这个图片数据要放到http的body中。
解决方案 »
- 修改packages.xml文件被还原问题
- Android4.0 模拟器 视频播放
- android报错,求解!
- android客户端连接服务器,用wifi可以访问成功,但用gprs访问的时候报错java.net.SocketException
- 从JPEG的byte数组怎么生成bmp?
- 求助】一个关于JNI的问题
- android滚动条的实现
- 安卓开发 cursor 的 getExtras() 方法有何作用,返回的 Bundle 怎么使用
- 点击ImageView背景为什么不变
- 安卓的数据存储跟JAVA的数据存储的区别
- R文件又消失!!!
- ViewFlipper一切换图片,其他view调用的layout方法就失效
求代码
Map<String, File> files) throws IOException {
StringBuilder sb2 = new StringBuilder();
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){
//int i = 0;
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"+(i++)+"\"; filename=\""+file.getKey()+"\""+LINEND);
sb1.append("Content-Disposition: form-data; name=\"userupfile\"; 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 = null;
if (res == 200) {
in = conn.getInputStream();
int ch;
while ((ch = in.read()) != -1) {
sb2.append((char) ch);
}
Log.i("CAMERA", sb2.toString());
}
return in == null ? null : sb2.toString();
}
我想再请教一下,怎么获得文件的类型?是png,jpg还是啥
这个应该不错
public static String newPost(Context context,String actionUrl, Map<String, String> params,String imagepath) {
String code = "0";
Util.saveLog(context,"Start:" + actionUrl);
Log.i("http", actionUrl);
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 1000*30);
HttpConnectionParams.setSoTimeout(httpParameters, 1000*30);
HttpConnectionParams.setTcpNoDelay(httpParameters, true); HttpClient httpclient = new DefaultHttpClient(httpParameters);
HttpPost httppost = new HttpPost(actionUrl);
MultipartEntity mpEntity = new MultipartEntity();
try {
File imageFile = new File(imagepath);
if(!imageFile.exists()) {
Log.i("http", "999");
code = "999";
}
for (Map.Entry<String, String> entry : params.entrySet()) {
String key = entry.getKey().toString();
String value = entry.getValue().toString();
Log.i("Http","KEY:" + key + ",Value:" + value );
mpEntity.addPart(key, new StringBody(value));
}
FileBody file = new FileBody(imageFile);
mpEntity.addPart("userupfile", file);
httppost.setEntity(mpEntity);
HttpResponse response = httpclient.execute(httppost);
if (response.getStatusLine().getStatusCode() == 200) {
code = EntityUtils.toString(response.getEntity());
System.out.println("result:" + code);
Log.i("http", code);
Util.saveLog(context,"End:" + code);
}
} catch (Exception e) {
Util.saveLog(context,"ERROR:"+e.getMessage());
return "999";
}
return code;
}需要用到 apache的2个包apache-mime4j-0.6.jar,httpmime-4.0.jar