(八)二进制文件在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中支持的数组的类型来进行传 ...
随机推荐
- keras检查点的保存
来自 keras的文档:https://keras.io/callbacks/#callback ModelCheckpoint keras.callbacks.ModelCheckpoint(fil ...
- java判断字符串是否中文、日文
直接上代码: import java.io.UnsupportedEncodingException; public class StringUtil { /** * 去掉字符串中的标点符号.空格和数 ...
- C++线程互斥、同步
一.线程互斥 如果多个线程需要访问且可能修改同一个变量,那么需要加锁,保证同一时刻只有一个线程可以访问,这个动作即最小“原子操作” 方式1: 使用c++提供的类mutex,lock,unlock即可 ...
- web框架之MVC/MTV
MVC框架 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式 Model(模型)表示应用程序核心(比如数据库记录列表) Vi ...
- PAT 甲级 1047 Student List for Course (25 分)(cout超时,string scanf printf注意点,字符串哈希反哈希)
1047 Student List for Course (25 分) Zhejiang University has 40,000 students and provides 2,500 cou ...
- activity 工作流
https://blog.csdn.net/cs_hnu_scw/article/details/79059965 https://blog.csdn.net/xnf1991/article/deta ...
- scala的wordcount
import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.sql.SparkSession object Wo ...
- html的css背景图的repeat
HTML里background-image中,可以设置background-repeat实现平铺,前面博文中关于css样式换行的(相关博文:超文本css样式换行),其中有个三个div组合的,中间的di ...
- FCKEDITOR在.NET中的使用
FCKEDITOR在.NET中的使用 FCKeditor介绍 FCKeditor是一个功能强大支持所见即所得功能的文本编辑器,可以为用户提供微软office软件一样的在线文档编辑服务.它不需要安装任何 ...
- Docker 容器的运行(八)
目录 一.运行容器 1.运行第一个容器 2.让容器长期运行 二.进入容器 1.attach 2.exec 3.attach VS exec 4.容器内部都在干些什么 三.停止/启动/重启容器 四.暂停 ...