在android项目中,很多情况下上传头像的需求,像qq,新浪微博,微信,飞信等很多应用都有这样的功能。
之前我写过的两篇文章:andorid下从相册选取/拍照选取一张相片并剪切和android下Bitmap和base64之间的转换把他们综合起来,就可以来实现头像从相册/拍照选取,后裁剪再上传的功能
完整源码下载
这里我只贴出上传图片的方法代码,至于怎么获取到获取到图片,请看andorid下从相册选取/拍照选取一张相片并剪切
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
/*
* 上传图片
*/
public
void
upload(View view) {
try
{
ByteArrayOutputStream out =
new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG,
100
, out);
out.flush();
out.close();
byte
[] buffer = out.toByteArray();
byte
[] encode = Base64.encode(buffer, Base64.DEFAULT);
String photo =
new
String(encode);
RequestParams params =
new
RequestParams();
params.put(
"photo"
, photo);
AsyncHttpClient client =
new
AsyncHttpClient();
client.post(url, params,
new
AsyncHttpResponseHandler() {
@Override
public
void
onSuccess(
int
statusCode, Header[] headers,
byte
[] responseBody) {
try
{
if
(statusCode ==
200
) {
Toast.makeText(MainActivity.
this
,
"头像上传成功!"
,
0
)
.show();
}
else
{
Toast.makeText(MainActivity.
this
,
"网络访问异常,错误码:"
+ statusCode,
0
).show();
}
}
catch
(Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public
void
onFailure(
int
statusCode, Header[] headers,
byte
[] responseBody, Throwable error) {
Toast.makeText(MainActivity.
this
,
"网络访问异常,错误码 > "
+ statusCode,
0
).show();
}
});
}
catch
(Exception e) {
e.printStackTrace();
}
}
|
从上边代码可以看出,又用到我钟爱的android-async-http 安卓异步http框架来访问网络
这样一操作,图片就会按Base64编码格式传送到服务器,而服务器端的代码也是非常简单的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
package
com.jerry.servlet;
import
java.io.File;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
javax.servlet.ServletException;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;
import
com.sun.org.apache.xml.internal.security.utils.Base64;
public
class
UploadImgServlet
extends
HttpServlet {
public
void
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
request.setCharacterEncoding(
"utf-8"
);
response.setCharacterEncoding(
"utf-8"
);
response.setContentType(
"text/html"
);
String photo = request.getParameter(
"photo"
);
try
{
// 对base64数据进行解码
byte
[] decode = Base64.decode(photo);
File file =
new
File(
"e:\\decode.jpg"
);
if
(!file.exists()) {
file.createNewFile();
}
FileOutputStream out =
new
FileOutputStream(file);
out.write(decode);
out.flush();
out.close();
}
catch
(Base64DecodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public
void
doPost(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
this
.doGet(request, response);
}
}
|
这样图片就成功的保存带E盘下