作者:余蒙
在实现一个Android的WEB服务客户端,比如微博,论坛客户端时,经常会使用到图片的上传和下载。在这里介绍如何利用HttpClient实现图片的上传和下载功能。
1 图片上传:上传图片时,首先获得图片的路径,创建文件,并将图片转化为字节流写入到request,并发送该请求。
客户端代码:
-
<spanstyle="font-size:16px;">Filefile=newFile(imageUrl);
-
StringhttpUrl=httpDomain+"AddImageServlet"+"?gid="+gid;
-
HttpPostrequest=newHttpPost(httpUrl);
-
HttpClienthttpClient=newDefaultHttpClient();
-
FileEntityentity=newFileEntity(file,"binary/octet-stream");
-
HttpResponseresponse;
-
try{
-
request.setEntity(entity);
-
entity.setContentEncoding("binary/octet-stream");
-
response=httpClient.execute(request);
-
-
-
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
-
……
-
}
-
}
-
catch(Exceptione){
-
}
-
</span>
服务器端所做的工作则是接收该字节流,写入文件中,并在服务器中相应文件夹中保存该文件,并记录该文件的路径,将图片文件路径写入到数据库中保存。
服务器端代码:
-
<spanstyle="font-size:16px;">
-
Stringgid=request.getParameter("gid");
-
StringfilePath=getRealPath(request)+"\\userpic\\";
-
-
intMAX_SIZE=102400*102400;
-
-
DataInputStreamin=null;
-
FileOutputStreamfileOut=null;
-
-
StringcontentType=request.getContentType();
-
if(contentType.indexOf("binary/octet-stream")>=0){
-
-
in=newDataInputStream(request.getInputStream());
-
intformDataLength=request.getContentLength();
-
-
if(formDataLength>MAX_SIZE){
-
Stringerrormsg=("上传的文件字节数不可以超过"+MAX_SIZE);
-
out.println(errormsg);
-
return;
-
}
-
-
bytedataBytes[]=newbyte[formDataLength];
-
intbyteRead=0;
-
inttotalBytesRead=0;
-
-
while(totalBytesRead<formDataLength){
-
byteRead=in.read(dataBytes,totalBytesRead,formDataLength);
-
totalBytesRead+=byteRead;
-
}
-
StringfileName=filePath+gid+".png";
-
-
FilefileDir=newFile(filePath);
-
if(!fileDir.exists()){
-
fileDir.mkdirs();
-
}
-
-
fileOut=newFileOutputStream(fileName);
-
-
fileOut.write(dataBytes);
-
fileOut.close();
-
-
-
……
-
</span>
2 图片下载:首先获得网络图片的图片地址,发送请求后,服务器将会返回该图片的字节流,利用BitmapFactory.decodeStream()方法将字节流转化为图片并返回。具体代码如下:
-
<spanstyle="font-size:16px;">
-
publicBitmapgetGossipImage(Stringgid){
-
StringhttpUrl=httpDomain+"userpic/"+gid+".png";
-
Bitmapbitmap=null;
-
HttpGethttpRequest=newHttpGet(httpUrl);
-
-
HttpClienthttpclient=newDefaultHttpClient();
-
try{
-
-
HttpResponsehttpResponse=httpclient.execute(httpRequest);
-
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
-
-
HttpEntityhttpEntity=httpResponse.getEntity();
-
InputStreamis=httpEntity.getContent();
-
bitmap=BitmapFactory.decodeStream(is);
-
is.close();
-
}else{
-
Toast.makeText(context,"连接失败!",Toast.LENGTH_SHORT).show();
-
}
-
-
}catch(ClientProtocolExceptione){
-
e.printStackTrace();
-
}catch(IOExceptione){
-
e.printStackTrace();
-
}
-
returnbitmap;
-
}
-
-
</span>
分享到:
相关推荐
android 图片选择图片上传到服务端并保存到mysql数据库,同时能支持从服务端下载图片资源
android 集成OSS 上传图片
import android.content.Context; import android.graphics.Bitmap; import android.util.AttributeSet; import android.widget.ImageView; import java.util.concurrent.ExecutorService; import java.util....
调用服务器的webservice接口,实现从Android上传图片到服务器,然后从服务器下载图片到Android客户端 从Android端用io流读取到要上传的图片,用Base64编码成字节流的字符串,通过调用webservice把该字符串作为参数...
一个android上传图片的模块,选择系统相册,使用了一个第三方库takephoto,可以扩展上传到服务器
android 拍照、上传、裁剪、图片
在Android远程上传以及下载图片
android图片上传和文件上传源码,附带你jsp服务器端源码,适合学习的例子
Android webview 上传图片,和html5 js 交互上传图片。.
很实用的例子,实现了Android图片批量上传,类似于微信上传图片。
上传图片:选择完的图片,直接上传到服务器 下载图片:当项目启动时先看本地有没有图像,没有则加载网络图片 图片过大内存溢出:在图片读取是处理里图片,解决了溢出问题 项目下载后,直接导入就可以运行,是2.2的...
这个demo实现了Android选择图片上传图片,包括上传单张图片和上传多张图片
高级进阶学习,android图片裁剪,图片上传。
android 通用图片上传,多文件上传,单文件皆可。。
Android多图片上传
ImageShowPicker 单纯的上传图片展示控件
android 实现文件图片上传 运用java流读和写的操作
Android图片拍照上传Demo.zip
android从本地图库选择图片上传都服务器,还可以拍照剪切上传。
1、creator实现调用android相机、相册,并将裁剪后的图片上传到服务器 2、保留全部代码,如果有疑问请留言