zoukankan      html  css  js  c++  java
  • WebService完成文件上传下载

    由于开发需要使用webservice,第一个接触的工具叫axis2。项目开发相关jar下载

    service端:

    启动类:

    import java.net.InetAddress;
    import javax.xml.ws.Endpoint;
    
    public class StartService 
    {
        public static void main(String[] args) 
        {
            try {
                //获取当前IP
                String ip = InetAddress.getLocalHost().getHostAddress();
                //将服务发布到指定路径
                System.out.println("IP:" + ip);
                String relativelyPath=System.getProperty("user.dir");
                System.out.println(relativelyPath);
                Endpoint.publish("http://"+ip+":9527/webservice/CBRC", new WebServiceImp());
                System.out.println("webservice 发布成功!");
            } catch (Exception e) {
                System.out.println("webservice 发布失败!");
                ;
            }
        }
    }

    实现类:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    
    import javax.jws.WebService;
    
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    
    
    //import Decoder.BASE64Decoder;
    //import Decoder.BASE64Encoder;
    
    
    @WebService
    public class WebServiceImp 
    {
        public String sendFile(String name,String file) throws Exception 
        {
            //上传文件
            String preference_path = "/webserviceupload";
            String relativelyPath=System.getProperty("user.dir");
            //存储路径
            String fileupload = relativelyPath + preference_path;
            File filepath = new File(fileupload);
            if (!filepath.exists()) {
                filepath.mkdirs();
            }
            
            /**
             *生成上传文件
             */
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream(fileupload + File.separator + name);
                byte[] filebs = new BASE64Decoder().decodeBuffer(file);
                fos.write(filebs);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                fos.close();
            }
            System.out.println("----------------------------------------------------------------------------------------");
            System.out.println("----------------------------------------------------------------------------------------");
            System.out.println("the file "+name+" was gotten !!");
            System.out.println("----------------------------------------------------------------------------------------");
            System.out.println("----------------------------------------------------------------------------------------");
            
            
            int splitIndex = name.lastIndexOf(".");
            String newName = name.substring(0,splitIndex) + ".pdf";
            TransferToPDFUtil.PdfManager(fileupload +File.separator+ name, fileupload +File.separator+ newName);
            System.out.println("----------------------------------------------------------------------------------------");
            System.out.println("finish file transfer");
            System.out.println("----------------------------------------------------------------------------------------");
            
            /**
             * 上传文件到客户端
             */
            File loc_file = new File(fileupload +File.separator+ newName);
            FileInputStream fis = null;
            String out = null;
            try {
                fis = new  FileInputStream(loc_file);
                byte[] bs = new byte[(int)loc_file.length()];
                fis.read(bs);
                out = new BASE64Encoder().encode(bs);
                fis.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            
            System.out.println("----------------------------------------------------------------------------------------");
            System.out.println("----------------------------------------------------------------------------------------");
            System.out.println("return CBRC");
            System.out.println("----------------------------------------------------------------------------------------");
            System.out.println("----------------------------------------------------------------------------------------");
            
            return out;
        }
        
    }

    client端:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    import javax.xml.namespace.QName;
    
    import org.apache.axis2.addressing.EndpointReference;
    import org.apache.axis2.client.Options;
    import org.apache.axis2.rpc.client.RPCServiceClient;
    
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    
    
    
    public class CBRC {
      public static void main(String[] args) throws Exception {  
         
          // 使用RPC方式调用WebService
          RPCServiceClient serviceClient = new RPCServiceClient();
          Options options = serviceClient.getOptions();
    
          EndpointReference targetEPR = new EndpointReference(
                  "http://10.74.3.191:9527/webservice/CBRC?wsdl");// 指定调用WebService的URL
          options.setTo(targetEPR);
    
          
          // RPCServiceClient类的invokeBlocking方法调用了WebService中的方法。invokeBlocking方法有三个参数,其中第一个参数的类型是QName对象,表示要调用的方法名;第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}。
          
          /*String endpoint = "http://10.74.3.191:9527/webservice/CBRC?wsdl";        //此处为wsdl地址
            Service service = new Service();
            Call call = (Call) service.createCall();
            call.setTargetEndpointAddress(new URL(endpoint));
            //setOperationName 方法 Qname 前一个参数为设置namespace,后一个参数为设置想要访问的方法
            call.setOperationName(new QName("http://wtp/","sendFile"));    
            //addParameter 方法即为添加元素的方法
            call.addParameter("arg0",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);
            call.addParameter("arg1",org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
            //设置返回值类型
            call.setReturnType(XMLType.XSD_STRING); */ 
            
            /**
             * 上传文件
             */
            File xml1 = new File("C:\Users\lenovo\Desktop\1.doc");
               FileInputStream fis1 = new FileInputStream(xml1);
               byte[] bytes1 = new byte[(int)xml1.length()];
               fis1.read(bytes1);
            //将byte数组转换为base64字符串
               String base64file = new BASE64Encoder().encode(bytes1);
               fis1.close();
            //访问目标方法
    //        String result = (String) call.invoke(new Object[]{"1.doc",base64file});
            //指定方法返回值的数据类型的Class对象
            Class[] classes = new Class[] { String.class };// 指定getGreeting方法返回值的数据类型的Class对象
              
            QName opAddEntry = new QName("http://wtp/","sendFile");// 指定要调用的getGreeting方法及WSDL文件的命名空间
               Object[] opAddEntryArgs = new Object[]{"1.doc",base64file};// 指定getGreeting方法的参数值
               String result = serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0].toString();
            /**
             * 下载文件
             */
            FileOutputStream fos = new  FileOutputStream("C:\Users\lenovo\Desktop\1.pdf");
            fos.write(new BASE64Decoder().decodeBuffer(result));
            fos.close();
            
            System.out.println("end");
        }  
    }

    原文引用:

        WebService 实现文件的上传下载(非自动生成)

    其他参考:

       使用Axis2方式发布webService的三种方式

       axis2 jar包详解及缺少jar包错误分析

  • 相关阅读:
    DNS服务器配置
    动态网站技术CGI
    SED单行脚本快速参考(Unix 流编辑器)
    xen 安静的角落
    IP命令
    oracle 监听文件 说明
    LRU ,LRUW,CKPT-Q
    重建控制文件ORA-12720
    历史备份控制文件恢复数据库
    增量检查点和完全检查点
  • 原文地址:https://www.cnblogs.com/Dream2hc/p/java0254307.html
Copyright © 2011-2022 走看看