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

 

转载于:https://www.cnblogs.com/shyroke/p/7659637.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值