Android网络客户端从服务器电脑上下载图片

        前言,bitmap位图,后缀名.bmp/.dip,图片的一种编码格式,一张图片由多个像素组成,每一个像素能够表达多种色彩。bitmap是inputStream、drawable、byte[]、outputStream的中转站,能够转换成某种。ImageView.setImageBitmap(Bitmap)能够显示bitmap图像。java

       AsyncTask的用法还不太清晰,后续添加补答。。。。android

     本次任务:安卓客户端发出请求下载服务器电脑上E盘下的一张名为u.jpg的图片。服务器

效果图:app

    安卓端代码:

package two.com.two;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import two.com.two.R;

public class HttpImageDownload extends Activity {
    //ctrl+alt+L是android studio的代码排版快速键
    ImageView iv;
    Button bon;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.image_download);
        iv = (ImageView) findViewById(R.id.imageView);
        bon = (Button) findViewById(R.id.tv_btn);
        bon.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                new thread().
                        execute("http://ly-and-tl.uicp.cn:42696/AndroidServer/HttpImageDownload?");
            }
        });
    }

    class thread extends AsyncTask<String, Void, Bitmap> {
        @Override
        protected void onPostExecute(Bitmap bitmap) {
            iv.setImageBitmap(bitmap);
            //此方法在主线程中执行因此能够更新控件
        }

        @Override
        protected Bitmap doInBackground(String... arg0) {
            // TODO Auto-generated method stub
            Bitmap bit = null;
            try {
                URL url = new URL(arg0[0]);
                HttpURLConnection huc = (HttpURLConnection) url.openConnection();
                InputStream is = huc.getInputStream();
                //重点了解BitmapFactory这个类
                // decodeStream()方法网上说低版本有时会出错是安卓自己的一个错误
                //此方法在后台线程中执行
                bit = BitmapFactory.decodeStream(is);
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return bit;
        }
    }
}

服务端代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//servlet3.0后简单的定义网址的方式
@WebServlet("/HttpImageDownload")
public class HttpImageDownload extends HttpServlet {
	private static final long serialVersionUID = 1L;
   
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String path="E:/u.jpg";//图片在本机路径
		File file=new File(path);
		if(file.exists()) System.out.println("存在!");
		FileInputStream fis=new FileInputStream(file);
		String filename=URLEncoder.encode(file.getName(),
				"UTF-8");
		response.setHeader("Content-Disposition",
				"attachment;"+"filename="+filename);//附件
		response.setCharacterEncoding("UTF-8");
		ServletOutputStream  os=response.getOutputStream();
		int len=0;
		byte[] b=new byte[1024];
		while((len=fis.read(b))!=-1) {
			os.write(b, 0, len);
		}
		os.flush();//发送
		if(fis!=null)fis.close();
		if(os!=null) os.close();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}
}
相关文章
相关标签/搜索