`

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

阅读更多

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 long upload(String filename,int action,String datastr);

}

 

服务端文件:

package service;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

import javax.servlet.http.HttpServletRequest;

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

public class HelloWorldImpl implements IHelloWorld {

 /**
  * @filename:要下载的文件名(全名);
  * @action:客户端要上传一份文件,考虑到断点续传功能,就必须要知道服务器上的文件现在的大小,才能确定从哪个位置开始传输,所以设计了这个action参数,值为0时表示询问文件大小,为1时表示传输的第三个参数datastr就是经过Base64编码的文件内容字符串;
  * @datastr:经过Base64编码的内容字符串;
  * @return:把文件的实时大小作为最新位置返回;
  */
 public long upload(String filename,int action,String datastr){
  String filepath="e://aaa//";
  long filesize=0;
  try{
   if (!filename.equals(null) && !filename.equals("")){
       File file=new File(filepath+filename);
       
       if(action==0){
              return file.length();
             }else{
              RandomAccessFile raf=new RandomAccessFile(file,"rw");
              raf.seek(file.length());//先定位
              byte[] bytes = Base64.decode(datastr);
           raf.write(bytes);
        //raf.skipBytes(datastr.length());//顺序写
              raf.close();
              //System.out.println("文件位置:"+file.length());
              //System.out.println("写入长度:"+datastr.length());
              filesize=file.length();
             }
   }
   return filesize;
  }catch(Exception e){
   e.printStackTrace();
   return 0;
  }
 }

 

}

 

客户端代码:

package service;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
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"; 
  DynamicClientTest web=new DynamicClientTest();

  Long start=System.currentTimeMillis();

  DynamicClientTest web=new DynamicClientTest();

  Object[] results4=web.getWebService(surl, "upload", new Object[] { "test.rar",0,null});
  long startpost=(Long)results4[0];
  //System.out.println("起始位置:"+startpost);
  int BUFFER_LENGTH = 1024 * 20;//一次性读入大小
  int SLEEP_TIME=250;//循环读次数
  long filesize=0;

  FileInputStream fis = null;   
  try {
   File upfile=new File("e://GMS.rar");
   filesize=upfile.length();
   //System.out.println("文件大小:"+filesize);
   fis=new FileInputStream(upfile);
   fis.skip(startpost);//读文件前,先定位
   while(startpost<filesize){
    StringBuffer sb = new StringBuffer(); 
          int time=0;
          byte[] buffer = new byte[BUFFER_LENGTH];   
                int count=-1;   
                while (time<SLEEP_TIME && (count = fis.read(buffer)) != -1) {//这里要特别注意“time<SLEEP_TIME”条件一定要放在“(count = fis.read(buffer)) != -1”的前面,“&&”是在满足第一个条件的前提下才继续判断第二个条件的,否则,不管是否执行循环下面的代码,只要fis.read(buffer)一执行,读取文件的定位都会往后移,这样会造成下一次循环读取的数据就不对了。
                    sb.append(Base64.encode(buffer,0,count));  
                    time++;
                }
          String ret= sb.toString();  
       results4=web.getWebService(surl, "upload", new Object[] { "test.rar",1,ret});
       startpost=(Long)results4[0];
       //System.out.println("位置:"+startpost);
   }

   Long end=System.currentTimeMillis();
   System.out.println("用时:"+(end-start));
  } 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();   
        }   
    }
}

分享到:
评论

相关推荐

    XFire框架实现WebService(二)

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

    java使用XFire调用webService接口

    "Java 使用 XFire 调用 webService 接口" 在本文中,我们将学习如何使用 XFire 框架在 Java 中调用 webService 接口。...通过本文,我们可以更好地理解和应用 XFire 框架,提高 Web 服务的开发和集成效率。

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

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

    xfire框架jar包合集 大全

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

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

    首先,我们来看标题中的"使用XFire实现SOAP的webservice数据传输源码"。要创建一个SOAP Web服务,你需要以下步骤: 1. **定义服务接口**:使用Java编程语言定义服务接口,这些接口将代表可供远程调用的方法。 ```...

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

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

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

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

    Java使用XFire调用WebService接口

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

    xfire webservice 上传下载源码

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

    xfire webservice实现附件上传

    本文将深入探讨如何利用XFire实现附件上传功能,这对于构建支持文件交互的Web应用至关重要。 首先,我们需要了解XFire的基础知识。XFire(现已被Apache CXF项目合并)是一个基于Java的开源Web服务框架,它利用了...

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

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

    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使用XFire调用WebService接口.docx编程资料

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

    java webservices xfire Demo

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

    java webservice基于xfire实例

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

    WebService框架XFire

    虽然XFire不直接提供全面的安全解决方案,但它支持基于SOAP消息的安全特性,如WS-Security(Web Services Security),可以集成其他安全框架来实现身份验证、授权和加密等功能。 9. **与CXF的关系**: 随着时间的...

    安卓源码之在远程上传下载图片XFire框架.zip

    这个源码示例将展示如何利用XFire框架来实现这两个功能。 首先,我们需要在Android项目中集成XFire库。这可以通过添加依赖或者直接将库文件导入项目完成。集成后,我们需要创建一个服务接口,定义上传和下载图片的...

Global site tag (gtag.js) - Google Analytics