(八)二进制文件在webservice中的处理(以byte[]字节数组方式)
一、介绍
- 二进制文件在webservice中的处理。
A:通过byte[]字节数组的方式来传递。比较适合小文件,字节数组不能太大的情况。(本章所用)
B:通过DataHander的方式来进行传递。
1:接口中要定义@MTOM
2:方法中要使用@XmlMimeType(value = "application/octet-stream")
二、需求
- 1. 客户端从服务端下载附件
- 2. 客户端上传附件到服务端
三、案例
2.1 服务端
2.1.1 编写服务接口
package service; import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService; /**
* 本服务提供 1. 从服务器中下载附件,以byte[]类型 2. 上传附件到服务器,以byte[]类型
*
* @author Administrator
*
*/
@WebService
public interface IFile { @WebResult(name = "getImageResult")
public byte[] getImage(); public void sendImage(@WebParam(name = "byteArray") byte[] byteArray, @WebParam(name = "fileName") String fileName);
}
2.1.2 实现服务接口
package service; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; import javax.jws.WebService; import org.apache.commons.io.IOUtils; @WebService(endpointInterface = "service.IFile")
public class IFileImpl implements IFile { /**
* 提供给客户端图片的字节流
*/
@Override
public byte[] getImage() {
byte[] byteArray = null;
try {
File file = new File("F:\\server\\1.png");
FileInputStream input = new FileInputStream(file);
byteArray = IOUtils.toByteArray(input);
} catch (Exception e) {
e.printStackTrace();
} return byteArray;
} /**
* 客户端上传的附件的字节流
*/
@Override
public void sendImage(byte[] byteArray, String fileName) { if (byteArray != null && byteArray.length > 0) {
try {
FileOutputStream fileOutputStream = new FileOutputStream("F:\\server\\" + fileName + "");
IOUtils.write(byteArray, fileOutputStream);
} catch (Exception e) {
e.printStackTrace();
}
} } }
2.1.3 发布服务
package publish;
import javax.xml.ws.Endpoint;
import service.IFileImpl;
public class TestPublish {
public static void main(String[] args) {
Endpoint.publish("http://localhost:3030/first", new IFileImpl());
System.out.println("发布成功.....");
}
}
2.2 客户端
2.2.1 用工具生成客户端代码

2.2.2 测试
package test; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.rmi.RemoteException; import org.apache.commons.io.IOUtils; import service.IFile;
import service.IFileProxy; public class Test {
public static void main(String[] args) {
// getImage(); sendImage();
} private static void getImage() {
IFile ifile = new IFileProxy().getIFile();
try {
/**
* 从服务端下载附件的字节流,并保存到当地文件夹
*/
byte[] byteArray = ifile.getImage();
IOUtils.write(byteArray, new FileOutputStream("F:\\client\\test.png"));
} catch (Exception e) {
e.printStackTrace();
} }
/**
* 上传附件到服务端
*/
private static void sendImage() {
IFile ifile = new IFileProxy().getIFile();
try {
FileInputStream input = new FileInputStream("F:\\client\\2.png");
byte[] byteArray = IOUtils.toByteArray(input);
ifile.sendImage(byteArray, "2.png");
} catch (Exception e) {
e.printStackTrace();
} } }
(八)二进制文件在webservice中的处理(以byte[]字节数组方式)的更多相关文章
- Java 中的字符串与 []byte 字节数组
一.字符串 1.比较 String.HashSet.List 中的 contains 方法 其中, String.List 都使用了 indexOf 方法,本质是遍历,时间效率为 O(n).而 Has ...
- (九)二进制文件在webservice中的处理(以DataHandler方式)
一.需求 1. 客户端从服务端下载附件 2. 客户端上传附件到服务端 二.案例 本章通过DataHander的方式来进行传递. 注意: 1:接口中要定义@MTOM 2:方法中要使用@XmlMime ...
- c#中关于结构体和字节数组转化
最近在使用结构体与字节数组转化来实现socket间数据传输.现在开始整理一下.对于Marshal可以查阅msdn,关于字节数组与结构体转代码如下: using System; using System ...
- delphi中如何将string类型的字符串数据转化成byte[]字节数组类型的数据
var S:String; P:PChar; B:array of Byte;begin S:='Hello'; SetLength(B,Length(S)+1); P:=PChar(S) ...
- WebService中方法的相关注意事项
2014-11-14 在WebService中定义方法,有一些注意的地方: (1) 方法上面需要增加 [WebMethod] 属性,标志该方法是一个WebService方法: (2)方法的返回值可以为 ...
- MAXIMO系统 java webservice 中PDA移动应用系统开发
MAXIMO系统 java webservice 中PDA移动应用系统开发 平时经常用的wince PDA手持设备调用c#写的webservice, 当然PDA也可以调用java webservic ...
- WebService中实现上传下载文件
不多说,直接看代码: /*上传文件的WebService*/ using System; using System.Collections; using System.Collections.Gene ...
- WCF和WebService中获取当前请求报文的方法
WCF中: 1. 在hosting WCF的web.config中加入: <system.serviceModel> <serviceHostingEnvironment aspNe ...
- 在webservice中传递Hashtable
webservice中不支持hashtable的数据类型,那么如何在webservice中传递hashtable呢?我们可以通过将hashtable转化为webservice中支持的数组的类型来进行传 ...
随机推荐
- [Java]两个将秒数转化为日时分秒形式的函数
比如900秒要反应一下,说15分就直观了.下面两个函数性能差不多,大家任意取用. 代码: import java.util.concurrent.TimeUnit; public class Test ...
- Redis 单线程却能支撑高并发 - 简书 https://www.jianshu.com/p/2d293482f272
小结: 1.在 I/O 多路复用模型中,最重要的函数调用就是 select,该方法的能够同时监控多个文件描述符的可读可写情况:2.Redis 服务采用 Reactor 的方式来实现文件事件处理器(每一 ...
- IOS和Andriod手机浏览器内核
手机浏览器是基于什么内核? 如果细分的话,目前全球仅有四个独立的浏览器内核: 1. 微软IE的Trident 2. 网景最初研发后卖给Mozilla基金会并演化成火狐的Gecko 3. KDE的开 ...
- LC 456. 132 Pattern
Given a sequence of n integers a1, a2, ..., an, a 132 pattern is a subsequence ai, aj, ak such that ...
- 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_06-Feign远程调用-Ribbon测试
2.1.2 Ribbon测试 Spring Cloud引入Ribbon配合 restTemplate 实现客户端负载均衡.Java中远程调用的技术有很多,如: webservice.socket.rm ...
- iOS的推送证书过期的处理
1.删除MAC上钥匙串访问中对应的推送证书.<根据过期日期看> 2.登录苹果开发者后台,revoke删除已过期推送证书(貌似会自己消失不用删除,具体记不清了...),然后为对应App ID ...
- xcode出现the file couldn't be opened怎么解决
右键——show In finder——显示xcode包内容——将有数字的删除——把有用的xcode双击
- WordPress主题制作:基础样式文件
1.style.css文件,其中必须包含 /* Theme Name:主题名称 Theme URI: 主题链接 Version: 版本 Description: 主题简介 Author: 主题作者 A ...
- 【c# 学习笔记】封装
封装 指的是把类内部的数据隐藏起来,不让对象实例直接对其操作.c#中提供了属性机制来对类内部的状态进行操作. 在c#中,封装可以通过Public.Private.Protected和Internal等 ...
- 《Fluid Engine Development》 学习笔记4-预测校正不可压缩SPH-PCISPH
传统SPH方案的主要问题之一是时间步长限制.在原始的SPH中,我们首先从当前设置计算密度,使用EOS计算压强,应用压力梯度,然后运行时间积分.这个过程意味着只需要一定的压缩量就可以触发内核半径内的压力 ...