1 图片上传:上传图片时,首先获得图片的路径,创建文件,并将图片转化为字节流写入到request,并发送该请求。
客户端代码:
- <span style="font-size:16px;"> 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){
- }
- </span>
服务器端所做的工作则是接收该字节流,写入文件中,并在服务器中相应文件夹中保存该文件,并记录该文件的路径,将图片文件路径写入到数据库中保存。
服务器端代码:
- <span style="font-size:16px;">//获得新闻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();
- //保存文件的路径名
- ……
- </span>
2 图片下载:首先获得网络图片的图片地址,发送请求后,服务器将会返回该图片的字节流,利用BitmapFactory.decodeStream()方法将字节流转化为图片并返回。具体代码如下:
- <span style="font-size:16px;">//获得网络中的图片
- 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;
- }
- </span>
-
把bitmap存储为byte数组,然后再通过Intent传递。
代码如下所示:
在另一个activity中取出来的方法是:
取出来字节数组之后,用BitmapFactory中的decodeByteArray方法组合成一个bitmap就可以了。