(八)二进制文件在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(); } } }