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;
	}


相关文章
|
8月前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
230 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
3月前
|
存储 Android开发 数据安全/隐私保护
Thanox安卓系统增加工具下载,管理、阻止、限制后台每个APP运行情况
Thanox是一款Android系统管理工具,专注于权限、后台启动及运行管理。支持应用冻结、系统优化、UI自定义和模块管理,基于Xposed框架开发,安全可靠且开源免费,兼容Android 6.0及以上版本。
197 4
|
3月前
|
存储 人工智能 文字识别
三款安卓手机word编辑器下载,Microsoft Word,wps office,Word手机版,手机word编辑查看阅读器,PDF转换器apk下载
WPS Office是一款功能强大的办公软件,支持文档编辑、表格处理和演示文稿制作,兼容多种格式并提供丰富的云服务。它具备低内存占用、快速运行的特点,支持跨设备同步与多人协作,内置海量模板及AI辅助功能,如智能写作和PPT自动生成。此外,还可扫描文件、编辑PDF并转换为其他格式,极大提升办公效率,适合手机用户便捷操作。
209 1
|
5月前
|
XML Android开发 数据格式
Android利用selector(选择器)实现图片动态点击效果
本文介绍了Android中ImageView的`src`与`background`属性的区别及应用,重点讲解如何通过设置背景选择器实现图片点击动态效果。`src`用于显示原图大小,不拉伸;`background`可随组件尺寸拉伸。通过创建`selector_setting.xml`,结合`setting_press.xml`和`setting_normal.xml`定义按下和正常状态的背景样式,提升用户体验。示例代码展示了具体实现步骤,包括XML配置和形状定义。
231 3
Android利用selector(选择器)实现图片动态点击效果
|
7月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
1396 77
|
5月前
|
Java Android开发
Android图片的手动放大缩小
本文介绍了通过缩放因子实现图片放大缩小的功能,效果如动图所示。关键步骤包括:1) 在布局文件中设置 `android:scaleType=&quot;matrix&quot;`;2) 实例化控件并用 `ScaleGestureDetector` 处理缩放手势;3) 使用 `Matrix` 对图片进行缩放处理。为避免内存崩溃,可在全局配置添加 `android:largeHeap=&quot;true&quot;`。代码中定义了 `beforeScale` 和 `nowScale` 变量控制缩放范围,确保流畅体验。
165 8
|
5月前
|
缓存 编解码 Android开发
Android内存优化之图片优化
本文主要探讨Android开发中的图片优化问题,包括图片优化的重要性、OOM错误的成因及解决方法、Android支持的图片格式及其特点。同时介绍了图片储存优化的三种方式:尺寸优化、质量压缩和内存重用,并详细讲解了相关的实现方法与属性。此外,还分析了图片加载优化策略,如异步加载、缓存机制、懒加载等,并结合多级缓存流程提升性能。最后对比了几大主流图片加载框架(Universal ImageLoader、Picasso、Glide、Fresco)的特点与适用场景,重点推荐Fresco在处理大图、动图时的优异表现。这些内容为开发者提供了全面的图片优化解决方案。
181 1
|
8月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
259 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
8月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
243 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡

热门文章

最新文章