webservice文件上传下载(byte[] 实现方式)
测试环境:axis2-1.6.1、6.0.20、jdk1.5
说明:本方式仅适用于文件小于10M的场景(否则会出现内存溢出),大文件的上传下载应另选其他方式。
1、创建要发布成webservice的java类。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class BlobService { /*
* 文件上传服务
*/
public boolean uploadFile(String fileName,byte[] bytes)
{
FileOutputStream fos = null;
try{
fos = new FileOutputStream("F:\\"+fileName); //将字节数组bytes中的数据,写入文件输出流fos中
fos.write(bytes);
fos.flush();
}catch (Exception e){
e.printStackTrace();
return false;
}finally{
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return true;
}
/*
* 文件下载服务
*/
public byte[] downloadFile()
{
String filepath = "F:\\head.jpg";
FileInputStream in = null;
byte bytes[] = null;
try {
in = new FileInputStream(filepath);
bytes = new byte[in.available()]; //从输入流in中,将 bytes.length 个字节的数据读入字节数组bytes中
in.read(bytes);
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return bytes;
}
}
2、将上面的java类编译后的class文件放到axis2\WEB-INF\pojo目录下。
3、编写客户端程序。
package client; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Date;
import javax.xml.namespace.QName;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient; public class BlobRPCClient
{
public static void main(String[] args) throws Exception
{
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference("http://localhost:8080/axis2/services/BlobService");
options.setTo(targetEPR); //=================测试文件上传================================== String filePath = "f:\\head.jpg";
FileInputStream fis = new FileInputStream(filePath); // 创建保存要上传的图像文件内容的字节数组
byte[] buffer = new byte[fis.available()]; //将输入流fis中的数据读入字节数组buffer中
fis.read(buffer); //设置入参(1、文件名,2、文件字节流数组)
Object[] opAddEntryArgs = new Object[]{"我是上传的文件.jpg", buffer}; //返回值类型
Class<?>[] classes = new Class<?>[]{ Boolean.class }; //指定要调用的方法名及WSDL文件的命名空间
QName opAddEntry = new QName("http://ws.apache.org/axis2","uploadFile"); //关闭流
fis.close(); //执行文件上传
System.out.println(new Date()+" 文件上传开始");
Object returnValue = serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes)[0];
System.out.println(new Date()+" 文件上传结束,返回值="+returnValue); //=================测试文件下载================================== opAddEntry = new QName("http://ws.apache.org/axis2", "downloadFile"); System.out.println(new Date()+" 文件下载开始");
byte bytes[] = (byte[]) serviceClient.invokeBlocking(opAddEntry, new Object[]{}, new Class[]{byte[].class})[0];
FileOutputStream fileOutPutStream = new FileOutputStream("F:\\我是下载的文件.jpg"); //将字节数组bytes中的数据,全部写入输出流fileOutPutStream中
fileOutPutStream.write(bytes);
fileOutPutStream.flush();
fileOutPutStream.close();
System.out.println(new Date()+" 文件下载完成");
}
}
文章来源:http://huangqiqing123.iteye.com/blog/1454819
webservice文件上传下载(byte[] 实现方式)的更多相关文章
- webservice文件上传下载
使用DataHandler实现webservice的文件上传下载 服务端代码: package com.hello.weChat.controller; import javax.activation ...
- WebService实现文件上传下载
一:服务端:一个普通java web工程 package com.wzh.file; import com.sun.xml.ws.developer.StreamingAttachment; impo ...
- iOS开发之结合asp.net webservice实现文件上传下载
iOS开发中会经常用到文件上传下载的功能,这篇文件将介绍一下使用asp.net webservice实现文件上传下载. 首先,让我们看下文件下载. 这里我们下载cnblogs上的一个zip文件.使用N ...
- SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)
SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...
- SpringMVC文件上传下载
在Spring MVC的基础框架搭建起来后,我们测试了spring mvc中的返回值类型,如果你还没有搭建好springmvc的架构请参考博文->http://www.cnblogs.com/q ...
- FastDFS实现文件上传下载实战
正好,淘淘商城讲这一块的时候,我又想起来当时老徐让我写过一个关于实现FastDFS实现文件上传下载的使用文档,当时结合我们的ITOO的视频系统和毕业论文系统,整理了一下,有根据网上查到的知识,总结了一 ...
- Retrofit2文件上传下载及其进度显示
序 前面一篇文章介绍了Retrofit2的基本使用,这篇文章接着介绍使用Retrofit2实现文件上传和文件下载,以及上传下载过程中如何实现进度的显示. 文件上传 定义接口 1 2 3 @Multip ...
- JavaWeb实现文件上传下载功能实例解析
转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...
- java web 文件上传下载
文件上传下载案例: 首先是此案例工程的目录结构:
随机推荐
- TODO 思维模型 尺子 游标卡尺
100个人 两个思维切入点 1>做对的题怎么分配 m(x)表示答对x道题的最多人数f(x)表示答对x道题的人数 m(0)=5m(1)=20=>f(0)=0m(2)=m(1)+1=21=&g ...
- Skyline(6.x)-二次开发手册使用技巧
毕业设计选择 Skyline 的 Web 端二次开发,由于以前没有接触过 ActiveX 控件的使用,二次开发手册是英文的读起来有点吃力,并且 IE 直接控制台输出 ActiveX 控件创建的对象看不 ...
- leetcode 215. 数组中的第K个最大元素(python)
在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2输出: 5示 ...
- 疑难杂症——解决 Cinder 僵尸卷问题
目录 目录 问题描述 问题解决 最后 问题描述 Cinder 的僵尸卷一般是因为操作不当导致分配的卷无法正常使用且无法正常分离或删除. 问题解决 解决僵尸卷问题的思路类似解决 Linux 系统中的僵尸 ...
- c++内存布局与c程序的内存布局
c/c++的内存布局:堆,栈,自由存储区(与堆的区别),全局/静态存储区,常量存储区(字符串常量,const常量) http://www.cnblogs.com/QG-whz/p/5060894.ht ...
- 洛谷P2865 [USACO06NOV]路障Roadblocks——次短路
给一手链接 https://www.luogu.com.cn/problem/P2865 这道题其实就是在维护最短路的时候维护一下次短路就okay了 #include<cstdio> #i ...
- Thread -线程的两种创建方式
package cn.learn.thread.Thread; /* 实现Runnable必须重写run()方法,一般推荐用Runnable实现 */ public class RunnableImp ...
- 简单谈谈Netty的高性能之道
传统RPC 调用性能差的三宗罪 网络传输方式问题:传统的RPC 框架或者基于RMI 等方式的远程服务(过程)调用采用了同步阻塞IO,当客户端的并发压力或者网络时延增大之后,同步阻塞IO 会由于频繁的w ...
- Ubuntu12.04安装MariaDB并修改字符集为UTF-8
其实按照MariaDB官网的步骤来安装MariaDB特别的简单,只要按照步骤来做,很容易就搞定了. 首先,到MariaDB官网: https://downloads.mariadb.org/maria ...
- canvas添加事件
https://blog.csdn.net/xundh/article/details/78722744