如何利用Axis2+Spring实现文件上传(支持jsp页面的form表单提交),Android客户端调用

来源:互联网 发布:移动加强网络信息安全 编辑:程序博客网 时间:2024/06/06 00:42

参考博文:

http://blog.csdn.net/thinkpadshi/article/details/8173765

http://blog.csdn.net/helloworlddream/article/details/9469497


今天下午搞了一下Webservice实现文件上传的功能,接下来的项目中要使用,下面是今天的劳动成果。主要记录一下Webservice服务端怎么写,Android客户端怎么调用,至于form表单的提交,我看了一下上面的提到的博文,应该也是满足的,代码基本借鉴上面的两篇博文中的代码,惭愧,但是还是记录一下,方便自己以后使用,加深一下印象。


完整Service代码:

import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.Calendar;import javax.activation.DataHandler;import org.springframework.stereotype.Service;@Servicepublic class MaeipServiceJws {// 使用DataHandler类型参数上传文件  public boolean uploadWithDataHandler(DataHandler profile_picture) {  FileOutputStream fos = null;  try {  profile_picture.getContentType();profile_picture.getContent();String[] fileinfo=profile_picture.getName().split("\\.");if (fileinfo.length>1){fos = new FileOutputStream("D:\\WebserviceUpload\\"+Calendar.getInstance().getTimeInMillis()+"."+fileinfo[1]);  }else{fos = new FileOutputStream("D:\\WebserviceUpload\\"+Calendar.getInstance().getTimeInMillis());  }// 可通过DataHandler类的getInputStream方法读取上传数据  writeInputStreamToFile(profile_picture.getInputStream(), fos);  fos.close();  } catch (Exception e) {  return false;  } finally {  if (fos != null) {  try {  fos.close();  } catch (Exception e) {  }  }  }  return true;  } private void writeInputStreamToFile(InputStream is, OutputStream os)  throws Exception {  int n = 0;  byte[] buffer = new byte[8192];  while ((n = is.read(buffer)) > 0) {  os.write(buffer, 0, n);  }  }  }

下面是Android客户端的代码调用,Android上传使用的是android-async-http工具,我的另一篇文章中有介绍,地址:http://blog.csdn.net/u013758734/article/details/39504075,不过这里不同的是,设置参数的时候,下面的params.put("profile_picture",file);这里的参数名必须是profile_picture,因为服务端的参数名就是这个,和另一篇不同,因为那个服务端是使用SpringMVC来写的,可以SpringMVC直接将HttpServletRequest中文件封装为Spring自己的MultipartHttpServletRequest ,所以可以直接将request转换为MultipartHttpServletRequest,然后获取MultipartFile即可,服务端不需要指定参数,根据上下文就可以得到,Axis2是需要的,我上面指定的参数名称为profile_picture,它的类型为DataHandler。

private void uploadImageTest(){File file = new File("/storage/sdcard0/xixi.png");String uploadUrl="http://192.168.1.111:8082/maeip/services/MaeipServiceJws/uploadWithDataHandler";RequestParams params=new RequestParams();System.out.println(file.length());try {params.put("profile_picture", file);AsyncHttpClient client =new AsyncHttpClient();    //实例话对象client.setTimeout(600000); //设置链接超时,如果不设置,默认为10s client.post(uploadUrl,params,uploadResponseHander());} catch (Exception e) {e.printStackTrace();}}/** * 上传回调 * @return */private AsyncHttpResponseHandler uploadResponseHander(){return new AsyncHttpResponseHandler(){@Overridepublic void onSuccess(int statusCode, Header[] headers, byte[] responseBody){Log.i("UploadResult", "上传完成");}@Overridepublic void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error){error.printStackTrace();Log.i("UploadResult", "上传完成");}};}

OK就这样简单。


0 0
原创粉丝点击