最近写项目有一个图片上传的功能,现在项目已经结束啦,我就想着把这个东东贴出来和大家分享一下,希望对大家有所帮助,其实很简单的,大家一看应该就明白了,有什么不明白的,请留言啊
上传图片也就是一个方法就搞定啦,那就开始上关键代码吧:
public static String uploadFile(File file, String uploadUrl) {
String result = null;
String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成
String LINE_END = "\r\n";//换行,相当于回车
String CONTENT_TYPE = "multipart/form-data"; // 内容类型
try {
//根据url获取URL对象
URL url = new URL(uploadUrl);
//由URL对象获取HttpURLConnection对象,链接到指定的网络地址
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置超时
conn.setReadTimeout(TIME_OUT);
conn.setConnectTimeout(TIME_OUT);
// 允许输入流
conn.setDoInput(true);
// 允许输出流
conn.setDoOutput(true);
// 不允许使用缓存
conn.setUseCaches(false);
// 请求方式
conn.setRequestMethod("POST");
// 设置编码
conn.setRequestProperty("Charset", CHARSET);
conn.setRequestProperty("connection", "keep-alive");
conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);
/**
* 当文件不为空,把文件包装并且上传
*/
if (file != null) {
//根据链接网络地址的HttpURLConnection对象获取输出流
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
//上传文件的头部
// StringBuffer sb = new StringBuffer();
// sb.append(PREFIX);
// sb.append(BOUNDARY);
// sb.append(LINE_END);
// /**
// * 这里重点注意: name里面的值为服务端需要key 只有这个key 才可以得到对应的文件
// * filename是文件的名字,包含后缀名的 比如:abc.png
// */
//
//
// sb.append("Content-Disposition: form-data; name=\"uploadfile\"; filename=\""
// + file.getName() + "\"" + LINE_END);
// sb.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINE_END);
// sb.append(LINE_END);
// dos.write(sb.toString().getBytes());
//创建InputStream对象
InputStream is = new FileInputStream(file);
//缓存数组
byte[] bytes = new byte[1024];
int len = 0;
while ((len = is.read(bytes)) != -1) {
dos.write(bytes, 0, len);
}
is.close();
//换行
dos.write(LINE_END.getBytes());
dos.flush();
/**
* 获取响应码 200=成功 当响应成功,获取响应的流
*/
int res = conn.getResponseCode();
// if(res==200)
// {
InputStream input = conn.getInputStream();
StringBuffer sb1 = new StringBuffer();
int ss;
while ((ss = input.read()) != -1) {
sb1.append((char) ss);
}
//服务器返回的数据
result = sb1.toString();
// }
// else{
// Log.e(TAG, "request error");
// }
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
注释已经写得很详细啦,其他我就不多说啦!