在某些时候 项目需求中需要实现图片上传和图片获取功能 我需要把图片转换成byte[]封装在xml中 将xml文件加压后上传到.NET WCF服务中
上传之前的步骤:
一、将图片转换为byte[]
1 File files=new File(getFilesDir(), "cameranew.jpg"); 2 InputStream ins=new FileInputStream(files); 3 BitmapUtil util=new BitmapUtil(); 4 Bitmap mapBitmap=util.getBitmapFormStream(ins); 5 ByteArrayOutputStream outputStream2=new ByteArrayOutputStream(); 6 mapBitmap.compress(Bitmap.CompressFormat.JPEG,100, outputStream2); 7 outputStream2.flush(); 8 outputStream2.close(); 9 byte[] bys=outputStream2.toByteArray();
二、把byte[]进行Base64
1 String strings=android.util.Base64.encodeToString(bys, 0);//Base64很重要
三、把经过Bas64处理后返回的字符串写进xml文件中:
1 public void xmlwrite(String bytes) throws Exception{ 2 File file=new File(getFilesDir(),"photos1.xml"); 3 FileOutputStream outputStream=new FileOutputStream(file); 4 XmlSerializer xmlSerializer=Xml.newSerializer(); 5 xmlSerializer.setOutput(outputStream, "UTF-8"); 6 xmlSerializer.startDocument("UTF-8", true); 7 xmlSerializer.startTag(null, "NewDataset"); 8 xmlSerializer.startTag(null, "Table"); 9 xmlSerializer.startTag(null, "photo"); 10 xmlSerializer.text(bytes); 11 xmlSerializer.endTag(null, "photo"); 12 xmlSerializer.endTag(null, "Table"); 13 xmlSerializer.endTag(null, "NewDataset"); 14 xmlSerializer.endDocument(); 15 outputStream.close(); 16 }
接下来的ksoap调用WCF 就省略了 其他文章有详细记录 传到WCF服务端后 按着我们相反的过程进行处理 就可以存到服务端指定的文件夹下了
获取服务端图片,WCF端以我们这里上传的步骤一样的,这个过程如下:解压-----解析xml-----对解析后的字符串进行Base64处理-----将图片存到本地
一、解压 (见其他文章)略
二、解析xml
1 public String xmlread() throws Exception{ 2 String bytr=null; 3 File file=new File(getFilesDir(),"photos1.xml"); 4 InputStream inputStream=new FileInputStream(file); 5 XmlPullParser pullParser=Xml.newPullParser(); 6 pullParser.setInput(inputStream, "UTF-8"); 7 int event=pullParser.getEventType(); 8 while (event!=XmlPullParser.END_DOCUMENT) { 9 switch(event){ 10 case XmlPullParser.START_DOCUMENT: 11 break; 12 case XmlPullParser.START_TAG: 13 if("photo".equals(pullParser.getName())){ 14 bytr=pullParser.nextText(); 15 } 16 break; 17 case XmlPullParser.END_TAG: 18 break; 19 } 20 event=pullParser.next(); 21 } 22 return bytr; 23 }
三、对字符串进行Base64处理后返回byte[]
1 String str=xmlread(); 2 byte[] bys=android.util.Base64.decode(str, 0);
四、存到本地
1 File files=new File(getFilesDir(), "photo_a.jpg"); 2 FileOutputStream phoneOutStream=new FileOutputStream(files); 3 phoneOutStream.write(bts, 0, bts.length); 4 phoneOutStream.close();
如果需要批量上传图片 需要改动。