CXF:通过WebService上传文件,包括大文件的处理
参考网上文章,用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上传文件,包括大文件的处理的更多相关文章
- 使用SAS和JavaScript前端上传Azure Bolb大文件
问题描述: Azure Storage Rest API提供了对于大文件分块上传方法,分别使用Put Block和Put Block List实现相关功能 参考链接: Uploading Large ...
- 如何免费上传4G以上大文件至百度云网盘
百度云网盘的容量高达2048G,因而如今使用百度云网盘的用户也越来越多, 但是百度云中如果要上传超过4G的大文件,必须要升级VIP才行,但这需要收费.那么,超过4G以上的大文件我们该怎样上传到百度云呢 ...
- ASPCMS不能上传2M以上大文件修改!
\admin_aspcms\editor\upload.asp修改80行左右maxattachsize=xxxxxxxx'最大上传大小,默认是2M前提是IIS上传大小已修 其他有关IIS方面的修改: ...
- git上传超过100m大文件
1.git出错如下错误时 执行如下可解决错误: git rm --cache '大文件路径' git commit --amend -CHEAD git push 2.当必须上传大文件时.需借助git ...
- 精讲RestTemplate第6篇-文件上传下载与大文件流式下载
本文是精讲RestTemplate第6篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...
- 20160113006 asp.net实现ftp上传代码(解决大文件上传问题)
using System;using System.Configuration;using System.Data;using System.Linq;using System.Web;using S ...
- 居于H5的多文件、大文件、多线程上传解决方案
文件上传在web应用中是比较常见的功能,前段时间做了一个多文件.大文件.多线程文件上传的功能,使用效果还不错,总结分享下. 一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件进行上传: 支 ...
- 前端上传视频、图片、文件等大文件 组件Plupload使用指南
demo:https://blog.csdn.net/qq_30100043/article/details/78491993 Plupload上传插件中文帮助文档网址:http://www.phpi ...
- Delphi调用JAVA的WebService上传XML文件(XE10.2+WIN764)
相关资料:1.http://blog.csdn.net/luojianfeng/article/details/512198902.http://blog.csdn.net/avsuper/artic ...
随机推荐
- java并发编程实践学习(2)--对象的组合
先验条件(Precondition):某些方法包含基于状态的先验条件.例如,不能从空队列中移除一个元素,在删除元素前队列必须处于非空状态.基于状态的先验条件的操作成为依赖状态操作. 在单线程中,如果某 ...
- QT学习笔记6
事件(event) 一般来说,使用Qt编程时,我们并不会把主要精力放在事件上,因为在Qt中,需要我们关心的事件总会发出一个信号.比如,我们关心的是QPushButton的鼠标点击,但我们不需要关心这个 ...
- JS 实现可停顿的垂直滚动
var ScrollMiddle = { 'Odiv':document.getElementById('comment'), // 目标DOM 'Oli': document.getElementB ...
- for循环的一种简化
数组: var arr = [1, 2, 3, 5, 6]; 传统的教科书式的循环写法: for(var i=0; i<arr.length; i++){ console.log(arr[i]) ...
- JS弹出框插件zDialog再次封装
zDialog插件网址:http://www.jq22.com/jquery-info2426 再次封装zDialog的代码: (function ($) { $.extend({ iDialog: ...
- The Web server is configured to not list the contents of this directory.
部署一个ASP.NET MVC网站至一个全新的服务器Windows Server 2008 R2, 数据为MS SQL Server 2014 64bit Expression版本. 运行时,它第一次 ...
- Winform 显示Gif图片
代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...
- 微信、QQ、微博、陌陌……社交网络的底层逻辑是什么?
两 年前的社交产品泛滥犹在眼前,场景之胜几乎到了言必谈社交的地步.时任阿里新CEO陆兆禧举全集团之力,力推新社交产品“来往”,动作之大震惊整个互联 网.如今,陆兆禧早早退场,只留下一个硬汉的孤独背 ...
- MVC之前的那点事儿系列(4):Http Pipeline详细分析(上)
文章内容 继续上一章节的内容,通过HttpApplicationFactory的GetApplicationInstance静态方法获取实例,然后执行该实例的BeginProcessRequest方法 ...
- HTML5中的sessionStorage和localStorage
html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage. sessionStorage用于本地存储一个会话(session)中的数据,这些数据只 ...