显示web端servlet向android端传输二进制格式图片
来源:互联网 发布:网络摄像头破解 编辑:程序博客网 时间:2024/05/27 01:29
我们项目组的组长居然要将图片转成二进制流存到数据库内~~。。。我去。。。极度不赞同啊。哎个人意见是将图片上传到服务器端,将图片资源保存保存到服务器端的磁盘上,数据库存储的只是图片在服务端的路径。。。。但。哎~~官大一级压死人啊。。没办法呗~~只好动脑找资料,经过一天的奋斗终于把这问题给解决咯~~呵呵呵
我的思路是将图片转成二进制流byte[],再将byte[]转成String类型的字符串,然后利用流将其传输。
好了 不多说咯 上代码。
首先在web端的servlet内
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
FileInputStream fis=new FileInputStream("F:/古典美女/haha.jpg");
ByteArrayOutputStream baos=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int count=0;
while((count=fis.read(buffer))>=0){
baos.write(buffer);
}
String str=new String(Base64.encode(baos.toByteArray()));
PrintWriter pw=response.getWriter();
pw.write(str);
pw.flush();
pw.close();
}
这部分的代码位于web端的servlet的doPost方法内。。我这里为了简约。。没有连接数据库得到图片的二进制流,而是用本地的一张图片将其转为二进制数组,将其传到android端。。道理都是一样的。。呵呵呵呵呵。
最值得注意的是:String str=new String(Base64.encode(baos.toByteArray()));这句代码,利用Base64的编码类的静态方法encode将一个byte[]转成String类型的对象
注意。。尽管byte[]也有一个toString的方法可以将byte[]转成String,但貌似这个方法存在弊端。会存在数据丢失和乱码(我试过了。。不知道你们会怎样。。)然后用PrintWriter写出去。。。。。
好了 web端的代码就这么多
关键是android端的代码。ok!!! 上代码
先说明.android端的AndroidManifest.xml文件要添加<uses-permission android:name="android.permission.INTERNET"/>权限
private ImageView image=null;
public static String path="http://10.0.2.2:8080/ConnDB/NewServlet";
private String result="";
先在activity内声明三个变量。
在OnCreate()内
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
image=(ImageView) findViewById(R.id.image);
showImage();
}
好了 来看看showImage方法内的代码
public void showImage(){
HttpGet request=new HttpGet(path);
try {
//使用response接收servlet返回的数据
HttpResponse response=new DefaultHttpClient().execute(request);
//判断servlet是否返回成功
if(response.getStatusLine().getStatusCode()==200){
HttpEntity entity=response.getEntity();
BufferedReader br=new BufferedReader(new InputStreamReader
(entity.getContent(),"UTF-8"));
String line="";
while((line=br.readLine())!=null){
result=result+line;
}
System.out.println(result);
if(!result.equals("")){
Bitmap bitmap=ConnTestActivity.getBitmapFromByte(result);
image.setImageBitmap(bitmap);
}
}
}catch(Exception e){
e.printStackTrace();
}
result="";
}
这里通过传过来的String生成byte[],在用其生成一个Bitmap对象,在设置在ImageView内 将其显示
Bitmap bitmap=ConnTestActivity.getBitmapFromByte(result);
image.setImageBitmap(bitmap);
下面来看看getBitmapFromByte(result);方法
public static Bitmap getBitmapFromByte(String str){
if(str==null){
return null;
}
Bitmap bitmap=null;
byte[] bytes = Base64.decode(str);
bitmap=BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
return bitmap;
}
byte[] bytes = Base64.decode(str);这句代码的作用于web端的作用相反,将Streing转换成byte[]。。。。。
好了 代码写到这里咯。。。。接下来就是运行了
运行android模拟器将会显示
不过这里有点小小的问题。。。就是Base64这个类。。。。
Base64这个类原本并不属于java官方类的api,尽管在java文件中可以使用这个类。。但在android使用的话却会报错。。。就是这一点搞得我很头痛 。。结果实在没办法,只好上网找别人写好的编码类。。将其变成一个class类放到项目中使用。ok 问题解决。。。。。。
如果有人需要这个编码类的话 可以到我的空间下载 我会上传上去的 。。。你也可以上网自己找。。呵呵呵呵呵
Base64.java的连接:http://download.csdn.net/my/uploads
- 显示web端servlet向android端传输二进制格式图片
- 二进制格式图片显示
- android向web传输数据
- android二进制显示图片
- Servlet传输二进制
- Servlet利用base64和json向客户端传输图片
- 获取后台传输的二进制流图片并显示
- Android显示gif格式图片
- Android显示gif格式图片
- .net中显示数据库中存储的二进制格式图片
- 前端将图片二进制流显示在html端
- 关于文本格式传输和二进制格式传输
- [Android] Json格式解析和文字图片传输
- C#显示二进制图片
- C#显示二进制图片
- C#显示二进制图片
- flex 显示二进制图片
- jsp显示二进制图片
- 在对话框中加入属性页
- iPhone中使用ShareKit一键分享到Facebook,Twitter等多平台
- 装饰者模式
- 1.2支配值数目
- stat.st_dev的陷阱
- 显示web端servlet向android端传输二进制格式图片
- POJ 2352 Stars 线段树 单点更新 成段求和
- Informatica PowerCenter for windows from oracle 下载过程
- 价值博客列表
- 糗事百科
- POJ 2481 Cows 线段树
- 天使投资
- 国防部否认印度航母试航失败因采用中国耐火砖
- POJ 3067 Japan 线段树 转化