前言,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 { } }