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


相关文章
|
4月前
|
XML Java Android开发
Android Studio App开发之对图片进行简单加工(包括放缩,旋转等等 附源码)
Android Studio App开发之对图片进行简单加工(包括放缩,旋转等等 附源码)
45 0
|
4月前
|
XML Java Android开发
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
131 0
|
4月前
|
XML JSON Java
Android App开发即时通信中通过SocketIO在客户端与服务端间传输文本和图片的讲解及实战(超详细 附源码)
Android App开发即时通信中通过SocketIO在客户端与服务端间传输文本和图片的讲解及实战(超详细 附源码)
61 0
|
16天前
|
Android开发
Android保存图片到相册(适配android 10以下及以上)
Android保存图片到相册(适配android 10以下及以上)
19 1
|
1月前
|
Shell 开发工具 Android开发
ADB 下载、安装及使用教程:让你更好地管理 Android 设备
ADB 下载、安装及使用教程:让你更好地管理 Android 设备
455 2
|
1月前
|
Android开发 对象存储
OSS对象储存android开发进行下载到本地文件时异步操作失效
android vivo80使用官方示例代码进行文件下载,但是使用oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>()时onSuccess和onFailure不执行
|
4月前
|
API Android开发
[Android]图片加载库Glide
[Android]图片加载库Glide
54 0
|
4月前
|
Android开发
[Android]制作9-Patch图片
[Android]制作9-Patch图片
40 0
|
4月前
|
XML JSON Android开发
Android App开发实战项目之给用户推荐旅游信息图片(附源码 简单易懂)
Android App开发实战项目之给用户推荐旅游信息图片(附源码 简单易懂)
49 0
|
4月前
|
XML 缓存 Java
Android App开发之利用Glide实现图片的三级缓存Cache讲解及实战(附源码 超详细必看 简单易懂)
Android App开发之利用Glide实现图片的三级缓存Cache讲解及实战(附源码 超详细必看 简单易懂)
111 0