Spring Boot项目整合CXF,实现webservice接口上传下载大文件(包含服务端,消费端)
整合 CXF 实现消费端上传下载大文件,spring boot 项目。
具体可以见文章尾部的源码。
服务端:
cxfconfig 是cxf的一下配置文件。服务暴露的配置。
cxffilewrapper 存放附件属性的实体类
FileWS为服务端实现接口
Filewsimpl具体的服务端实现方法,包括对客户端上传的简单处理(保存),客户端下载文件,服务端提供的路径等。
具体依赖jar见源码。
消费端:
消费端 除 terryDownloadFile(自建用于下载文件),springboot启动类外,其余都是通过wsdl文件生成的客户端文件。
生成方式百度,一般来说jar 生成和cxf生成式有区别的,jar一般生成数据类型简单的。
wsdl2java -d D:\\ideaWorkSpace\\src\\main\\java -client http://localhost:8762/soap/user?wsdl
文件上传,在生成的代码,FileWS_FileWSImplPort_Client.java中进行了修改
主要代码如下:
在源码中注释掉了,没来得及改,其实这段代码是上传代码。
System.out.println("Invoking upload...");
com.zyyfw.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);
文件下载主要代码在terryDownLoadFile.java中:
public static void main(String args[]) throws java.lang.Exception {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(FileWS.class);
factory.setAddress("http://localhost:8762/soap/user");
FileWS fileWS = factory.create(FileWS.class);
CxfFileWrapper fileWrapper = fileWS.download();
OutputStream os = null;
InputStream is = null;
BufferedOutputStream bos = null;
try
{
is = fileWrapper.getFile().getInputStream();
// 文件在客户端的保存位置
File dest = new File("d:\\download\\" + fileWrapper.getFileName());
os = new FileOutputStream(dest);
bos = new BufferedOutputStream(os);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.flush();
System.out.println("下载完成");
} catch (
IOException e)
{
e.printStackTrace();
} 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) {
}
}
}
}
主要代码就这两端。具体可以详见源码。
参考文章:
https://www.cnblogs.com/huiy/p/6052221.html
https://blog.csdn.net/smugaoyi/article/details/78110879
源码地址:
https://github.com/TorresZheng/webservice-file-transport
联系方式:微信