下面是文件下载功能,可以实现大文件的断点续传,其原理是把服务端先把文件内容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));
}
}
相关推荐
XFIRE 是一个基于 Java 的开源框架,用于简化 Web 服务的开发和集成。下面,我们将通过一个简单的例子,展示如何使用 XFire 调用 webService 接口。 服务端(为客户端提供 webservice 接口) 在服务端,我们需要...
标题 "java+xfire(web service) + php 客户端 并实现文件加密" 描述了一个集成项目,其中涉及到Java、XFire(一个基于Java的Web服务实现框架)和PHP的交互,以及文件加密功能。这个项目的目标是构建一个安全的分布式...
在本篇中,我们将深入探讨如何使用XFire框架来实现Web服务。XFire是一个轻量级的Java Web Service框架,它允许开发者快速、方便地创建和消费SOAP服务。这篇文章可能是系列教程的第二部分,旨在帮助读者理解并掌握...
XFire框架是一个基于Java的Web服务实现,它在早期为开发者提供了一种高效、轻量级的方式来创建和消费Web服务。这个"xfire框架jar包合集 大全"包含了不同版本的XFire核心库,这对于我们理解XFire的功能和历史演变至关...
XFire是Java平台上的一个开源框架,它简化了SOAP Web服务的开发和部署过程。XFire通过XML绑定(XML Binding,如JAXB)和依赖注入(Dependency Injection,如Spring)等技术,为开发者提供了创建和消费Web服务的强大...
这个压缩包“Android应用源码之在远程上传以及下载图片---XFire框架.zip”显然是一个示例项目,它利用了XFire框架来实现这些功能。XFire是一款轻量级的Java Web服务框架,它提供了SOAP和RESTful服务的支持。虽然...
Java使用XFire实现Web服务(WebServices)是Java开发中的一种常见技术,它允许应用程序通过网络交换数据。XFire是一个轻量级、高性能的框架,它简化了在Java应用程序中创建和消费Web服务的过程。本篇文章将深入探讨...
在Java中,有很多库可以帮助开发者实现对Web服务的调用,其中之一就是XFire。这篇博客“Java使用XFire调用WebService接口”显然是讨论如何利用XFire这个开源框架来与Web服务交互。 XFire是Apache CXF项目的前身,它...
在IT行业中,Web服务是一种允许不同应用程序之间进行通信的技术,而`xfire`是一个流行的Java框架,用于构建和消费Web服务。本示例将详细解释如何利用xfire框架搭建一个包含SOAP Header身份验证和WS-Security身份验证...
在"xfire webservice 上传下载源码"这个主题中,我们将深入探讨如何使用XFire来实现文件的上传和下载功能,以及相关的核心概念和技术细节。 **一、XFire简介** XFire是Apache CXF的前身,其设计目标是简化Web服务的...
XFire是一个古老的但功能强大的Java Web服务框架,它为开发者提供了简单、高效的接口来创建和消费Web服务。这篇博文将深入探讨如何搭建XFire框架并进行实际应用。 首先,我们来了解XFire的基本概念。XFire是Apache ...
XFire和JAX(Java API for XML)都是在Java环境中实现WebService的重要工具,它们分别提供了不同的方法来处理身份验证,确保数据安全传输。 XFire是早期的一个开源项目,它是一个快速、灵活的Web服务框架,支持SOAP...
Java WebService是基于Java平台的一种服务提供和消费的技术,它允许不同系统间的应用程序通过网络进行交互。XFire是早期流行的Java WebService框架,它提供了快速、简单的方式来创建和使用Web服务。XFire基于Apache ...
本文将详细介绍如何使用Java语言结合XFire框架来实现对WebService接口的调用。文中将涵盖从服务端到客户端的整个开发流程,包括环境搭建、服务端接口的定义与发布、以及客户端的调用等关键步骤。 #### 二、环境准备...
在Java中,实现Web服务的一种流行框架就是XFire,一个快速、轻量级的SOAP(Simple Object Access Protocol)引擎。本教程将深入讲解如何使用XFire创建和消费Java Web服务。 一、Web服务基础 Web服务是基于开放标准...
Java Web服务(Xfire Demo)是面向开发者的一个实例教程,它主要展示了如何利用Xfire库来创建和使用Java Web服务。Xfire是一个轻量级、快速且易于使用的框架,专门用于构建基于SOAP(简单对象访问协议)的Web服务。在...
XFire,全称为XML Fire,是一款历史悠久的开源Java框架,主要用作服务导向架构(SOA)中的Web服务实现工具。它允许开发者快速构建、部署和管理基于HTTP的服务,支持SOAP和RESTful通信协议。在Java开发中,XFire通过...
WebService框架XFire是一款用于构建和消费Web服务的开源Java框架,它在早期的Web服务开发中扮演了重要角色。XFire是由Avalon项目发展而来,后来成为了CodeHaus组织的一部分,并最终演变为Apache CXF项目。理解XFire...