关于安卓调用C#的WebService上传图片问题(不使用ksoap2)
2014-11-08 13:47
609 查看
============问题描述============
小弟初学安卓开发。最近需要做一个图片上传的功能。
我是用java开发安卓,调用C#的WebService。在网上找到一大堆资料,几乎全部是用ksoap2包的。
请注意,我想做的是不用ksoap包的。
我现在的方法是从android端用读取到要上传的图片,用Base64编码成字节流的字符串,通过调用webservice把该字符串作为参数传到服务器端,服务端解码该字符串,最后保存到相应的路径下。整个上传过程的关键就是以字节流的字符串进行数据传递。
功能代码如下:
WebService:
我感觉理论上是没有什么问题的,但是实际上,执行到调用WebService的时候,拼接请求时, ts = new String("<" + tps + ">" + vps + "</" + tps + ">");这里可能是图片转base64编码的String串长度太长,导致内存溢出。
如何解决,望各位大神指教!或者程序有什么错还请大神们指出,或者教我用合适的方法。小弟分不多,还请见谅。
============解决方案1============
使用post进行提交
小弟初学安卓开发。最近需要做一个图片上传的功能。
我是用java开发安卓,调用C#的WebService。在网上找到一大堆资料,几乎全部是用ksoap2包的。
请注意,我想做的是不用ksoap包的。
我现在的方法是从android端用读取到要上传的图片,用Base64编码成字节流的字符串,通过调用webservice把该字符串作为参数传到服务器端,服务端解码该字符串,最后保存到相应的路径下。整个上传过程的关键就是以字节流的字符串进行数据传递。
功能代码如下:
WebService:
安卓端:调用WebService方法 public class UploadUtil { private static HttpConnSoap Soap = new HttpConnSoap(); public static void uploadImage(String filename, String image) { ArrayList<String>arrayList=new ArrayList<String>(); ArrayList<String>brrayList=new ArrayList<String>(); arrayList.clear(); brrayList.clear(); arrayList.add("filename"); arrayList.add("image"); brrayList.add(filename); brrayList.add(image); Soap.GetWebServre("uploadImage", arrayList, brrayList); } }
触发上传方法: @Override public void onClick(View v) { switch (v.getId()) { case R.id.selectImage: /*** * 这个是调用android内置的intent,来过滤图片文件 ,同时也可以过滤其他的 */ Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent, 1); break; case R.id.uploadImage: if (picPath == null) { Toast.makeText(Upload.this, "请选择图片!", 1000).show(); } else { final File file = new File(picPath); if (file != null) { UploadUtil.uploadImage(imgName, photodata); } } break; default: break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { /** * 当选择的图片不为空的话,在获取到图片的途径 */ Uri uri = data.getData(); try { Cursor cursor = getContentResolver().query(uri, null, null, null, null); if (cursor != null) { ContentResolver cr = this.getContentResolver(); cursor.moveToFirst(); String path = cursor.getString(1); // 图片文件路径 imgName = cursor.getString(3); // 图片文件名 if (path.endsWith("jpg") || path.endsWith("png")) { picPath = path; Bitmap bitmap = BitmapFactory.decodeStream(cr .openInputStream(uri)); imageView.setImageBitmap(bitmap); FileInputStream fis = new FileInputStream(path); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[20480]; int count = 0; while ((count = fis.read(buffer)) >= 0) { baos.write(buffer, 0, count); } byte[] bytes = baos.toByteArray(); photodata = Base64 .encodeToString(bytes, Base64.DEFAULT); } else { alert(); } } else { alert(); } } catch (Exception e) { } } super.onActivityResult(requestCode, resultCode, data); }
我感觉理论上是没有什么问题的,但是实际上,执行到调用WebService的时候,拼接请求时, ts = new String("<" + tps + ">" + vps + "</" + tps + ">");这里可能是图片转base64编码的String串长度太长,导致内存溢出。
如何解决,望各位大神指教!或者程序有什么错还请大神们指出,或者教我用合适的方法。小弟分不多,还请见谅。
============解决方案1============
String getFileString() { String fileStream = null; FileInputStream fis; try { fis = new FileInputStream(Environment.getExternalStorageDirectory() .getPath() + "/QuickCheck/image/temp.png"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int count = 0; while ((count = fis.read(buffer)) >= 0) { baos.write(buffer, 0, count); } fis.close(); fileStream = new String(Base64.encode(baos.toByteArray(), Base64.DEFAULT)); // 进行Base64编码 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return fileStream; }
使用post进行提交
相关文章推荐
- 关于安卓调用C#的WebService上传图片问题(不使用ksoap2)
- Android使用ksoap2调用C#中的webservice实现图像上传
- Android使用ksoap2调用C#中的webservice实现图像上传
- C++使用gSoap调用C#写的webservice中文乱码问题
- Android使用ksoap2调用C#中的webservice函数方法
- 关于java中Axis2客户端调用C#webservice服务端包含Cookie问题
- Android使用KSOAP2调用WebService及正确导入jar包的问题
- 完美解决部分安卓手机调用系统拍照上传时图片旋转问题
- 安卓开发小米4,酷派 手机适配和调用系统相机相册做图片上传的问题
- 解决 在Android开发上使用KSOAP2上传大图片到服务器经常报错的问题
- 关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
- 关于使用spring文件上传遇到的服务器中的图片访问不到报404的问题
- Android使用ksoap2调用C#中的webservice函数方法
- 关于 ksoap2调用 webservice 遇到的一些问题
- Android使用KSOAP2调用WebService及正确导入jar包的问题
- C#调用exe解决PDF转图片问题(使用PDFBox方案,java语言编译jar包实现)
- Android使用ksoap2调用C#中的webservice函数方法
- android webservice 上传图片到 sqlserver数据库 (基于ksoap2 , C#)
- Android使用ksoap2调用C#中的webservice函数方法
- Android使用KSOAP2调用WebService及正确导入jar包的问题(转)