![(八)二进制文件在webservice中的处理(以byte[]字节数组方式) (八)二进制文件在webservice中的处理(以byte[]字节数组方式)](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700&webp=1)
一、介绍
- 二进制文件在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();
} } }