zoukankan      html  css  js  c++  java
  • (八)二进制文件在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(); } } }
  • 相关阅读:
    js上传Excel文件
    在typescript中import第三方类库clipboard报错
    webpack学习(一)安装和命令行、一次js/css的打包体验及不同版本错误
    querySelector和getElementById之间的区别
    关于js延迟加载(异步操作)的方式
    addEventListener与attachEvent
    ES6 的Object.assign(target, source_1, ..., source_n)方法与对象的扩展运算符
    JS实现生成一个周对应日期数组
    微信小程序之媒体查询@media
    微信小程序之页面引用utils中的js文件
  • 原文地址:https://www.cnblogs.com/shyroke/p/7659637.html
Copyright © 2011-2022 走看看