Android编程实现图片的上传和下载功能示例

 更新时间:2016年10月29日 10:55:55   作者:pku_android  
这篇文章主要介绍了Android编程实现图片的上传和下载功能,涉及Android针对图片的字节流转换与传输操作相关技巧,需要的朋友可以参考下

本文实例讲述了Android编程实现图片的上传和下载功能。分享给大家供大家参考,具体如下:

在实现一个Android的WEB服务客户端,比如微博,论坛客户端时,经常会使用到图片的上传和下载。在这里介绍如何利用HttpClient实现图片的上传和下载功能。

1 图片上传:上传图片时,首先获得图片的路径,创建文件,并将图片转化为字节流写入到request,并发送该请求。

客户端代码:

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){
}

服务器端所做的工作则是接收该字节流,写入文件中,并在服务器中相应文件夹中保存该文件,并记录该文件的路径,将图片文件路径写入到数据库中保存。

服务器端代码:

//获得新闻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();
//保存文件的路径名
……

2 图片下载:首先获得网络图片的图片地址,发送请求后,服务器将会返回该图片的字节流,利用BitmapFactory.decodeStream()方法将字节流转化为图片并返回。具体代码如下:

//获得网络中的图片
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;
}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结

希望本文所述对大家Android程序设计有所帮助。

相关文章

  • Android APP与媒体存储服务的交互

    Android APP与媒体存储服务的交互

    本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner、MediaProvider以及媒体信息解析等部分),包括如何把 APP 新增或修改的文件更新到媒体数据库、如何在多媒体应用中隐藏 APP 产生的文件、如何监听媒体数据库的变化等等。
    2013-10-10
  • 一篇文章弄懂kotlin的扩展方法

    一篇文章弄懂kotlin的扩展方法

    这篇文章主要给大家介绍了如何通过一篇文章弄懂kotlin的扩展方法,文中通过示例代码介绍的非常详细,对大家学习或者使用kotlin具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • 当Flutter遇到节流与防抖的思路和流程优化

    当Flutter遇到节流与防抖的思路和流程优化

    这篇文章主要给大家介绍了关于当Flutter遇到节流与防抖的思路和流程优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • android绘制几何图形的实例代码

    android绘制几何图形的实例代码

    这篇文章主要为大家详细介绍了android绘制几何图形的实例代码 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Android自定义videoview仿抖音界面

    Android自定义videoview仿抖音界面

    这篇文章主要为大家详细介绍了Android自定义videoview仿抖音界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • Android编程之单元测试实例分析

    Android编程之单元测试实例分析

    这篇文章主要介绍了Android编程之单元测试,结合具体实例分析了Android单元测试的具体实现步骤与相关注意事项,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Android 8.0系统中应用图标的适配微技巧

    Android 8.0系统中应用图标的适配微技巧

    这篇文章主要介绍了Android 8.0系统中应用图标的适配微技巧 ,需要的朋友可以参考下
    2018-04-04
  • Android App中的GridView网格布局使用指南

    Android App中的GridView网格布局使用指南

    GridView布局所实现的就是类似于九宫格的矩阵界面效果,下面整理了Android App中的GridView网格布局使用指南,包括分割线的添加与自定义GridView的实现等技巧,需要的朋友可以参考下
    2016-06-06
  • Android中findViewById返回为空null的快速解决办法

    Android中findViewById返回为空null的快速解决办法

    这篇文章主要介绍了Android中findViewById返回为空null的快速解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Android 在 res/layout 文件夹 下创建一个 子文件夹实例

    Android 在 res/layout 文件夹 下创建一个 子文件夹实例

    这篇文章主要介绍了Android 在 res/layout 文件夹 下创建一个 子文件夹实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03

最新评论