`

JAVA应用XFire框架来实现WebServie的大文件传输功能之一(下载)

阅读更多

下面是文件下载功能,可以实现大文件的断点续传,其原理是把服务端先把文件内容Byte[]转换成Base64编码字符串返回给客户端,然后客户端接收到后再把该Base64编码过的字符串转换成Byte[],最后写入文件。

      至于断点续传的设计很简单,服务端留有一个定位参数,每次读取文件之前,都先定位,然后客户端在调用WebService接口之前,先取得本地该文件的大小,再把该值作为定位参数传过去就OK,最后根据接收到的字符串的长度为0时作为文件传输完毕的判断依据。

      另外如果想做到实时取得文件传输的进度的话,可以设计一个地址参数,根据累计传输大小来返回即可,在这里略过。

文件上传部分代码反过来即可,这里也略过。

xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://xfire.codehaus.org/config/1.0">

    <service>

       <name>HelloWorldService</name>

       <namespace>http://localhost:8090/WebServiceTest

       </namespace>

       <serviceClass>service.IHelloWorld</serviceClass>

       <implementationClass>service.HelloWorldImpl

       </implementationClass>

    </service>

</beans>
 

接口文件:

package service;

 

public interface IHelloWorld { 

    //sayHello 方法声明了Web服务对外暴露的接口


    public String download(String filename,long startpost) throws Exception ;

}

服务端文件:

package service;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;

import javax.activation.DataHandler;
import javax.servlet.http.HttpServletRequest;

import org.codehaus.xfire.transport.http.XFireServletController;
import org.codehaus.xfire.util.Base64;

public class HelloWorldImpl implements IHelloWorld {
 private RandomAccessFile raf=null;
 
 /**
  * @filename:要下载的文件名(全名);
  * @startpost:由于WebService不能一次性传输大文件,所以使用startpost定位参数来实现断点续传;
  * @return:把文件内容Byte[]转换成Base64编码返回;
  */
 public String download(String filename,long startpost) throws Exception {
  //System.out.println("要下载的文件名是:"+filename);
  int BUFFER_LENGTH = 1024 * 20;//一次性读入大小
  int SLEEP_TIME=250;//循环读次数
  int time=0;
  long filesize=0;
  String ret=null;
  String str=null;
  File file=new File("e://",filename);
  if (file.exists()) {
   filesize=file.length();
            FileInputStream fis = null;   
            try {   
                fis = new FileInputStream(file); 

                StringBuffer sb = new StringBuffer();   
               //System.out.println("定位:"+startpost);
                fis.skip(startpost);//先定位
                byte[] buffer = new byte[BUFFER_LENGTH];   
                int count;   
                while (time<SLEEP_TIME && (count = fis.read(buffer)) != -1 ) {
                    sb.append(Base64.encode(buffer,0,count));  
                    time++;
                }   
                ret = sb.toString();  
               //System.out.println("输出:"+ret.length());
            } catch (FileNotFoundException e) {   
                e.printStackTrace();   
                throw new Exception("出错啦!", e);   
            } catch (IOException e) {   
                e.printStackTrace();   
                throw new Exception("出错啦!", e);   
            } catch (Exception e) {   
                throw new Exception("出错啦!", e);   
            } finally {   
                fis.close();   
            }   
        }  

  return ret;
 }
 

}

 

客户端文件:

package service;

import java.io.File;
import java.io.RandomAccessFile;
import java.net.MalformedURLException;
import java.net.URL;

import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.transport.http.HttpTransport;
import org.codehaus.xfire.util.Base64;


public class DynamicClientTest {
 public Object[] getWebService(String surl,String saction,Object[] objarr) throws MalformedURLException,Exception
 {
   Client client = new Client(new URL(surl));
   //client.setProperty("mtom-enabled", "true");
   client.setProperty(HttpTransport.CHUNKING_ENABLED,"true"); 
   Object[] results = client.invoke(saction, objarr);
   return results;

 }
    public static void main(String[] args) throws MalformedURLException,Exception {
     String surl="http://localhost:8080/WebServiceTest/services/HelloWorldService?wsdl";

     Long start=System.currentTimeMillis();
     File file=new File("e://","test.rar");
     RandomAccessFile raf=new RandomAccessFile(file,"rw");
     //System.out.println("文件大小:"+file.length());
     raf.seek(file.length());//先定位
     boolean isend=false;
     while (!isend){

      DynamicClientTest web = new DynamicClientTest();
      Object[] results3=web.getWebService(surl, "download", new Object[]{"GMS.rar",file.length()});
      String data=(String)results3[0];
      //System.out.println("返回大小:"+data.length());
      byte[] bytes = Base64.decode(data);
      raf.write(bytes);
      raf.skipBytes(data.length());//顺序写
      if(data.length()<=0){isend=true;}
     }
     raf.close();

  Long end=System.currentTimeMillis();
  System.out.println("用时:"+(end-start));
}
}

分享到:
评论

相关推荐

    java使用XFire调用webService接口

    XFIRE 是一个基于 Java 的开源框架,用于简化 Web 服务的开发和集成。下面,我们将通过一个简单的例子,展示如何使用 XFire 调用 webService 接口。 服务端(为客户端提供 webservice 接口) 在服务端,我们需要...

    java+xfire(web service) + php 客户端 并实现文件加密

    标题 "java+xfire(web service) + php 客户端 并实现文件加密" 描述了一个集成项目,其中涉及到Java、XFire(一个基于Java的Web服务实现框架)和PHP的交互,以及文件加密功能。这个项目的目标是构建一个安全的分布式...

    XFire框架实现WebService(二)

    在本篇中,我们将深入探讨如何使用XFire框架来实现Web服务。XFire是一个轻量级的Java Web Service框架,它允许开发者快速、方便地创建和消费SOAP服务。这篇文章可能是系列教程的第二部分,旨在帮助读者理解并掌握...

    xfire框架jar包合集 大全

    XFire框架是一个基于Java的Web服务实现,它在早期为开发者提供了一种高效、轻量级的方式来创建和消费Web服务。这个"xfire框架jar包合集 大全"包含了不同版本的XFire核心库,这对于我们理解XFire的功能和历史演变至关...

    使用XFire实现SOAP的webservice数据传输源码(java)

    XFire是Java平台上的一个开源框架,它简化了SOAP Web服务的开发和部署过程。XFire通过XML绑定(XML Binding,如JAXB)和依赖注入(Dependency Injection,如Spring)等技术,为开发者提供了创建和消费Web服务的强大...

    Android应用源码之在远程上传以及下载图片---XFire框架.zip

    这个压缩包“Android应用源码之在远程上传以及下载图片---XFire框架.zip”显然是一个示例项目,它利用了XFire框架来实现这些功能。XFire是一款轻量级的Java Web服务框架,它提供了SOAP和RESTful服务的支持。虽然...

    java利用 xfire实现 webservices 服务端与客户端

    Java使用XFire实现Web服务(WebServices)是Java开发中的一种常见技术,它允许应用程序通过网络交换数据。XFire是一个轻量级、高性能的框架,它简化了在Java应用程序中创建和消费Web服务的过程。本篇文章将深入探讨...

    Java使用XFire调用WebService接口

    在Java中,有很多库可以帮助开发者实现对Web服务的调用,其中之一就是XFire。这篇博客“Java使用XFire调用WebService接口”显然是讨论如何利用XFire这个开源框架来与Web服务交互。 XFire是Apache CXF项目的前身,它...

    使用xfire框架搭建webService的一个demo

    在IT行业中,Web服务是一种允许不同应用程序之间进行通信的技术,而`xfire`是一个流行的Java框架,用于构建和消费Web服务。本示例将详细解释如何利用xfire框架搭建一个包含SOAP Header身份验证和WS-Security身份验证...

    xfire webservice 上传下载源码

    在"xfire webservice 上传下载源码"这个主题中,我们将深入探讨如何使用XFire来实现文件的上传和下载功能,以及相关的核心概念和技术细节。 **一、XFire简介** XFire是Apache CXF的前身,其设计目标是简化Web服务的...

    Webservices XFire框架的搭建与使用

    XFire是一个古老的但功能强大的Java Web服务框架,它为开发者提供了简单、高效的接口来创建和消费Web服务。这篇博文将深入探讨如何搭建XFire框架并进行实际应用。 首先,我们来了解XFire的基本概念。XFire是Apache ...

    WebService之XFire和Jax实现身份验证

    XFire和JAX(Java API for XML)都是在Java环境中实现WebService的重要工具,它们分别提供了不同的方法来处理身份验证,确保数据安全传输。 XFire是早期的一个开源项目,它是一个快速、灵活的Web服务框架,支持SOAP...

    java webservice XFire技术文档,一个简单列子和一个稍微难的列子

    Java WebService是基于Java平台的一种服务提供和消费的技术,它允许不同系统间的应用程序通过网络进行交互。XFire是早期流行的Java WebService框架,它提供了快速、简单的方式来创建和使用Web服务。XFire基于Apache ...

    Java使用XFire调用WebService接口.docx编程资料

    本文将详细介绍如何使用Java语言结合XFire框架来实现对WebService接口的调用。文中将涵盖从服务端到客户端的整个开发流程,包括环境搭建、服务端接口的定义与发布、以及客户端的调用等关键步骤。 #### 二、环境准备...

    java webservice基于xfire实例

    在Java中,实现Web服务的一种流行框架就是XFire,一个快速、轻量级的SOAP(Simple Object Access Protocol)引擎。本教程将深入讲解如何使用XFire创建和消费Java Web服务。 一、Web服务基础 Web服务是基于开放标准...

    java webservices xfire Demo

    Java Web服务(Xfire Demo)是面向开发者的一个实例教程,它主要展示了如何利用Xfire库来创建和使用Java Web服务。Xfire是一个轻量级、快速且易于使用的框架,专门用于构建基于SOAP(简单对象访问协议)的Web服务。在...

    xfire所需jar包

    XFire,全称为XML Fire,是一款历史悠久的开源Java框架,主要用作服务导向架构(SOA)中的Web服务实现工具。它允许开发者快速构建、部署和管理基于HTTP的服务,支持SOAP和RESTful通信协议。在Java开发中,XFire通过...

    WebService框架XFire

    WebService框架XFire是一款用于构建和消费Web服务的开源Java框架,它在早期的Web服务开发中扮演了重要角色。XFire是由Avalon项目发展而来,后来成为了CodeHaus组织的一部分,并最终演变为Apache CXF项目。理解XFire...

Global site tag (gtag.js) - Google Analytics