参考网上文章,用CXF发布上传文件接口,并上传大文件的测试。

框架:spring3.1+cxf2.7.6

1.定义文件类实体

import javax.activation.DataHandler;
import javax.xml.bind.annotation.XmlMimeType; /**
* CXF上传和下载文件对象包装类 由于CXF的DataHandler无法获取文件名和文件类型,需要在上传和下载时附带文件名
*
*/
public class CxfFileWrapper {
// 文件名
private String fileName = null;
// 文件扩展名
private String fileExtension = null;
// 文件二进制数据
private DataHandler file = null; public final String getFileName() {
return fileName;
} public final void setFileName(String fileName) {
this.fileName = fileName;
} public final String getFileExtension() {
return fileExtension;
} public final void setFileExtension(String fileExtension) {
this.fileExtension = fileExtension;
} // 注解该字段为二进制流
@XmlMimeType("application/octet-stream")
public final DataHandler getFile() {
return file;
} public final void setFile(DataHandler file) {
this.file = file;
}
}

2.定义服务接口

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService; import net.bwda.domain.upload.CxfFileWrapper; @WebService(name = "FileWS", serviceName = "FileWS")
public interface FileWS {
/**
* 文件上传
* @param file 文件上传包装类
* @return 上传成功返回true,上传失败返回false。
*/
@WebMethod
boolean upload(@WebParam(name = "file") CxfFileWrapper file); /**
* 文件下载
* @return 文件
*/
@WebMethod
CxfFileWrapper download();
} import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream; import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource; import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; import net.bwda.domain.upload.CxfFileWrapper;
import net.bwda.service.upload.FileWS; @Service
@Component("fileWS")
public class FileWSImpl implements FileWS { public boolean upload(CxfFileWrapper file){
boolean result = true;
OutputStream os = null;
InputStream is = null;
BufferedOutputStream bos = null;
try {
is = file.getFile().getInputStream();
File dest = new File("d:\\upload\\" + file.getFileName());
os = new FileOutputStream(dest);
bos = new BufferedOutputStream(os);
byte[] buffer = new byte[1024*1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.flush();
} catch (Exception e) {
e.printStackTrace();
result = false;
} finally {
if(bos != null){
try{
bos.close();
}catch(Exception e){
}
}
if(os != null){
try{
os.close();
}catch(Exception e){
}
}
if(is != null){
try{
is.close();
}catch(Exception e){
}
}
}
return result;
} public CxfFileWrapper download() {
//下载文件的路径
String filePath = "D:\\test.xlsx";
CxfFileWrapper fileWrapper = new CxfFileWrapper();
fileWrapper.setFileName("test.xlsx");
fileWrapper.setFileExtension("xlsx");
DataSource source = new FileDataSource(new File(filePath));
fileWrapper.setFile(new DataHandler(source));
return fileWrapper;
} }

3.定义CXF配置文件

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
xmlns:cxf="http://cxf.apache.org/core"> <import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <cxf:bus>
<cxf:properties>
<!-- 定义上传文件的最大长度,限制为256M -->
<entry key="org.apache.cxf.stax.maxTextLength" value="268435456" />
</cxf:properties>
</cxf:bus> <jaxws:endpoint id="fileWSEndpoint" implementor="#fileWS"
address="/file">
<jaxws:properties>
<!-- 开启MTOM -->
<entry key="mtom_enabled" value="true"></entry>
</jaxws:properties>
</jaxws:endpoint> </beans>

更多CXF配置,可参见:https://cxf.apache.org/docs/security.html

4.生成客户端代码

d:\apache-cxf-2.7.6\bin\wsdl2java.bat -frontend jaxws21 -p com..test.webservice.file -client http://localhost:9080/filemark/webservice/file?wsdl

5.根据自动上传的代码上传文件测试

/**
* Please modify this class to meet your needs
* This class is not complete
*/ import java.io.File;
import java.net.URL; import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName; /**
* This class was generated by Apache CXF 2.7.6
* 2016-11-10T18:37:44.270+08:00
* Generated source version: 2.7.6
*
*/
public final class FileWS_FileWSImplPort_Client { private static final QName SERVICE_NAME = new QName("http://upload.serviceimpl.bwda.net/", "FileWSImplService"); private FileWS_FileWSImplPort_Client() {
} public static void main(String args[]) throws java.lang.Exception {
URL wsdlURL = FileWSImplService.WSDL_LOCATION;
FileWSImplService ss = new FileWSImplService(wsdlURL, SERVICE_NAME);
FileWS port = ss.getFileWSImplPort(); {
System.out.println("Invoking upload...");
net.bwda.Test.webservice.CxfFileWrapper _upload_file = new CxfFileWrapper();
_upload_file.setFileName("test.csv");
_upload_file.setFileExtension("csv");
DataSource source = new FileDataSource(new File("d:\\test.csv"));
_upload_file.setFile(new DataHandler(source));
boolean _upload__return = port.upload(_upload_file);
System.out.println("upload.result=" + _upload__return);
} System.exit(0);
} }

CXF:通过WebService上传文件,包括大文件的处理的更多相关文章

  1. 使用SAS和JavaScript前端上传Azure Bolb大文件

    问题描述: Azure Storage Rest API提供了对于大文件分块上传方法,分别使用Put Block和Put Block List实现相关功能 参考链接: Uploading Large ...

  2. 如何免费上传4G以上大文件至百度云网盘

    百度云网盘的容量高达2048G,因而如今使用百度云网盘的用户也越来越多, 但是百度云中如果要上传超过4G的大文件,必须要升级VIP才行,但这需要收费.那么,超过4G以上的大文件我们该怎样上传到百度云呢 ...

  3. ASPCMS不能上传2M以上大文件修改!

    \admin_aspcms\editor\upload.asp修改80行左右maxattachsize=xxxxxxxx'最大上传大小,默认是2M前提是IIS上传大小已修 其他有关IIS方面的修改: ...

  4. git上传超过100m大文件

    1.git出错如下错误时 执行如下可解决错误: git rm --cache '大文件路径' git commit --amend -CHEAD git push 2.当必须上传大文件时.需借助git ...

  5. 精讲RestTemplate第6篇-文件上传下载与大文件流式下载

    本文是精讲RestTemplate第6篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  6. 20160113006 asp.net实现ftp上传代码(解决大文件上传问题)

    using System;using System.Configuration;using System.Data;using System.Linq;using System.Web;using S ...

  7. 居于H5的多文件、大文件、多线程上传解决方案

    文件上传在web应用中是比较常见的功能,前段时间做了一个多文件.大文件.多线程文件上传的功能,使用效果还不错,总结分享下. 一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件进行上传: 支 ...

  8. 前端上传视频、图片、文件等大文件 组件Plupload使用指南

    demo:https://blog.csdn.net/qq_30100043/article/details/78491993 Plupload上传插件中文帮助文档网址:http://www.phpi ...

  9. Delphi调用JAVA的WebService上传XML文件(XE10.2+WIN764)

    相关资料:1.http://blog.csdn.net/luojianfeng/article/details/512198902.http://blog.csdn.net/avsuper/artic ...

随机推荐

  1. 前端开发教程:使用 CSS3 Transforms 构建圆形导航

    在本教程中我将告诉你如何使用 CSS 变换来创建圆形导航.教程逐一讲解实现这个样式将要涉及一些基本的数学知识并配合 CSS 变换来创建这些样式.不过不用担心,这里用到的数学知识真的是很简单的.教程使用 ...

  2. Jackson序列化和反序列化Json数据完整示例

    Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会 ...

  3. Android数据库表的创建和数据升级操作

    之前的文章有提到,可以在xml文件中配置数据库信息:http://www.cnblogs.com/wenjiang/p/4492303.html,现在就讲如何利用这些信息类构建数据库. xml文件大概 ...

  4. QT学习笔记5

    Qt标准对话框之QFileDialog //QString path=QFileDialog::getOpenFileName(this,tr("open image"),&quo ...

  5. ES6 Features系列:Template Strings & Tagged Template Strings

    1. Brief ES6(ECMAScript 6th edition)于2015年7月份发布,虽然各大浏览器仍未全面支持ES6,但我们可以在后端通过Node.js 0.12和io.js,而前端则通过 ...

  6. Maven提高篇系列之(五)——处理依赖冲突

    这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...

  7. Chrome开发者工具详解(3)-Timeline面板

    Chrome开发者工具详解(3)-Timeline面板 注: 这一篇主要讲解面板Timeline,参考了Google的相关文档,主要用于公司内部技术分享.. Timeline面板 Timeline面板 ...

  8. 浅谈Dictionary用法

    一.基础篇 1.Dictionary泛型类提供了从一组键到一组值的映射,即键和值的集合类. 2.Dictionary通过键来检索值的速度是非常快的,这是因为 Dictionary 类是作为一个哈希表来 ...

  9. 【转载】那些年我们一起清除过的浮动demo

    返回文章:那些年我们一起清除过的浮动 闭合浮动 与 清除浮动 的区别 .main:很抱歉,现代浏览器中我没能把warp撑高(float:left) .side:我也浮动了(float:left) .f ...

  10. JS弹出框插件zDialog再次封装

    zDialog插件网址:http://www.jq22.com/jquery-info2426 再次封装zDialog的代码: (function ($) { $.extend({ iDialog: ...