Android中图片的上传和下载
2012-06-16 19:28
381 查看
作者:余蒙
在实现一个Android的WEB服务客户端,比如微博,论坛客户端时,经常会使用到图片的上传和下载。在这里介绍如何利用HttpClient实现图片的上传和下载功能。
1 图片上传:上传图片时,首先获得图片的路径,创建文件,并将图片转化为字节流写入到request,并发送该请求。
客户端代码:
[java] view
plaincopy
<span style="font-size:16px;"> File file = new File(imageUrl);
String httpUrl = httpDomain+"AddImageServlet"+"?gid="+gid;
HttpPost request = new HttpPost(httpUrl);
HttpClient httpClient = new DefaultHttpClient();
FileEntity entity = new FileEntity(file,"binary/octet-stream");
HttpResponse response;
try {
request.setEntity(entity);
entity.setContentEncoding("binary/octet-stream");
response = httpClient.execute(request);
//如果返回状态为200,获得返回的结果
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
……//图片上传成功
}
}
catch(Exception e){
}
</span>
服务器端所做的工作则是接收该字节流,写入文件中,并在服务器中相应文件夹中保存该文件,并记录该文件的路径,将图片文件路径写入到数据库中保存。
服务器端代码:
[java] view
plaincopy
<span style="font-size:16px;">//获得新闻id
String gid = request.getParameter("gid");
String filePath = getRealPath(request) + "\\userpic\\";
// 定义上载文件的最大字节
int MAX_SIZE = 102400 * 102400;
// 声明文件读入类
DataInputStream in = null;
FileOutputStream fileOut = null;
// 取得客户端上传的数据类型
String contentType = request.getContentType();
if(contentType.indexOf("binary/octet-stream") >= 0){
// 读入上传的数据
in = new DataInputStream(request.getInputStream());
int formDataLength = request.getContentLength();
// 如果图片过大
if(formDataLength > MAX_SIZE){
String errormsg=("上传的文件字节数不可以超过" + MAX_SIZE);
out.println(errormsg);
return ;
}
// 保存上传文件的数据
byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;
// 上传的数据保存在byte数组
while(totalBytesRead < formDataLength){
byteRead = in.read(dataBytes,totalBytesRead,formDataLength);
totalBytesRead += byteRead;
}
String fileName = filePath + gid+".png";
// 检查上载文件的目录是否存在
File fileDir = new File(filePath);
if(!fileDir.exists()){
fileDir.mkdirs();
}
// 创建文件的写出类
fileOut = new FileOutputStream(fileName);
// 保存文件的数据
fileOut.write(dataBytes);
fileOut.close();
//保存文件的路径名
……
</span>
2 图片下载:首先获得网络图片的图片地址,发送请求后,服务器将会返回该图片的字节流,利用BitmapFactory.decodeStream()方法将字节流转化为图片并返回。具体代码如下:
[java] view
plaincopy
<span style="font-size:16px;">//获得网络中的图片
public Bitmap getGossipImage(String gid){
String httpUrl = httpDomain+"userpic/"+gid+".png";
Bitmap bitmap = null;
HttpGet httpRequest = new HttpGet(httpUrl);
//取得HttpClient 对象
HttpClient httpclient = new DefaultHttpClient();
try {
//请求httpClient ,取得HttpRestponse
HttpResponse httpResponse = httpclient.execute(httpRequest);
if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
//取得相关信息 取得HttpEntiy
HttpEntity httpEntity = httpResponse.getEntity();
InputStream is = httpEntity.getContent();
bitmap = BitmapFactory.decodeStream(is);
is.close();
}else{
Toast.makeText(context, "连接失败!", Toast.LENGTH_SHORT).show();
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
</span>
在实现一个Android的WEB服务客户端,比如微博,论坛客户端时,经常会使用到图片的上传和下载。在这里介绍如何利用HttpClient实现图片的上传和下载功能。
1 图片上传:上传图片时,首先获得图片的路径,创建文件,并将图片转化为字节流写入到request,并发送该请求。
客户端代码:
[java] view
plaincopy
<span style="font-size:16px;"> File file = new File(imageUrl);
String httpUrl = httpDomain+"AddImageServlet"+"?gid="+gid;
HttpPost request = new HttpPost(httpUrl);
HttpClient httpClient = new DefaultHttpClient();
FileEntity entity = new FileEntity(file,"binary/octet-stream");
HttpResponse response;
try {
request.setEntity(entity);
entity.setContentEncoding("binary/octet-stream");
response = httpClient.execute(request);
//如果返回状态为200,获得返回的结果
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
……//图片上传成功
}
}
catch(Exception e){
}
</span>
服务器端所做的工作则是接收该字节流,写入文件中,并在服务器中相应文件夹中保存该文件,并记录该文件的路径,将图片文件路径写入到数据库中保存。
服务器端代码:
[java] view
plaincopy
<span style="font-size:16px;">//获得新闻id
String gid = request.getParameter("gid");
String filePath = getRealPath(request) + "\\userpic\\";
// 定义上载文件的最大字节
int MAX_SIZE = 102400 * 102400;
// 声明文件读入类
DataInputStream in = null;
FileOutputStream fileOut = null;
// 取得客户端上传的数据类型
String contentType = request.getContentType();
if(contentType.indexOf("binary/octet-stream") >= 0){
// 读入上传的数据
in = new DataInputStream(request.getInputStream());
int formDataLength = request.getContentLength();
// 如果图片过大
if(formDataLength > MAX_SIZE){
String errormsg=("上传的文件字节数不可以超过" + MAX_SIZE);
out.println(errormsg);
return ;
}
// 保存上传文件的数据
byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;
// 上传的数据保存在byte数组
while(totalBytesRead < formDataLength){
byteRead = in.read(dataBytes,totalBytesRead,formDataLength);
totalBytesRead += byteRead;
}
String fileName = filePath + gid+".png";
// 检查上载文件的目录是否存在
File fileDir = new File(filePath);
if(!fileDir.exists()){
fileDir.mkdirs();
}
// 创建文件的写出类
fileOut = new FileOutputStream(fileName);
// 保存文件的数据
fileOut.write(dataBytes);
fileOut.close();
//保存文件的路径名
……
</span>
2 图片下载:首先获得网络图片的图片地址,发送请求后,服务器将会返回该图片的字节流,利用BitmapFactory.decodeStream()方法将字节流转化为图片并返回。具体代码如下:
[java] view
plaincopy
<span style="font-size:16px;">//获得网络中的图片
public Bitmap getGossipImage(String gid){
String httpUrl = httpDomain+"userpic/"+gid+".png";
Bitmap bitmap = null;
HttpGet httpRequest = new HttpGet(httpUrl);
//取得HttpClient 对象
HttpClient httpclient = new DefaultHttpClient();
try {
//请求httpClient ,取得HttpRestponse
HttpResponse httpResponse = httpclient.execute(httpRequest);
if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
//取得相关信息 取得HttpEntiy
HttpEntity httpEntity = httpResponse.getEntity();
InputStream is = httpEntity.getContent();
bitmap = BitmapFactory.decodeStream(is);
is.close();
}else{
Toast.makeText(context, "连接失败!", Toast.LENGTH_SHORT).show();
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
</span>
相关文章推荐
- android图片的上传、下载和一些缩放操作
- Android通过WebService实现图片的上传和下载(一)
- 第二篇 ( wcf 与 android 图片上传下载)
- Android通过WebService实现图片的上传和下载(一)
- android仿微信朋友圈上传,下载图片源码
- android图片获取、编辑、上传、下载、缓存、显示过程实现
- Android开发中使用七牛云存储进行图片上传下载
- Android之调用webservice 实现图片上传下载
- Android 上传/下载图片
- android 附件(图片)上传下载功能开发
- Android前段与后台服务器的图片上传与下载
- Android-对相册中的图片进行上传或下载
- android之调用webservice 实现图片上传下载
- android开发游记:图片的上传下载-使用七牛云存储管理图片
- android+nutz后台如何上传和下载图片
- android 下载 ios上传图片的角度显示问题
- Android--第四天(网络图片查看器,多线程下载,文件断点上传原理,Intent,Activity生命周期,广播,服务)
- 在Android远程上传以及下载图片---XFire框架
- android上传和下载图片
- 【Android】Android与服务器交互 POST上传多个图片文件、文本内容 GET下载图片