android xml文件中进行上传图片以及获取图片

在某些时候 项目需求中需要实现图片上传和图片获取功能 我需要把图片转换成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();

如果需要批量上传图片 需要改动。

posted @   润羲  阅读(1466)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示