WebService中文件傳輸

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

WebService處理傳遞普通的信息,還可以傳輸文件,下面介紹WebService是怎么完成文件傳輸的。

1、 首先編寫服務器端上傳文件的WebService方法

復制代碼
 
package com.hoo.service; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import javax.activation.DataHandler; /** * <b>function:</b>Axis WebService完成文件上傳服務器端 * @author hoojo * @createDate Dec 18, 2010 1:16:16 PM * @file UploadFileService.java * @package com.hoo.service * @project AxisWebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class UploadFileService { /** * <b>function:</b>傳遞文件 * @author hoojo * @createDate Dec 18, 2010 1:27:58 PM * @param handler DataHandler這個參數必須 * @param fileName 文件名稱 * @return upload Info */ public String upload(DataHandler handler, String fileName) { if (fileName != null && !"".equals(fileName)) { File file = new File(fileName); if (handler != null) { InputStream is = null; FileOutputStream fos = null; try { is = handler.getInputStream(); fos = new FileOutputStream(file); byte[] buff = new byte[1024 * 8]; int len = 0; while ((len = is.read(buff)) > 0) { fos.write(buff, 0, len); } } catch(FileNotFoundException e) { return "fileNotFound"; } catch (Exception e) { return "upload File failure"; } finally { try { if (fos != null) { fos.flush(); fos.close(); } if (is != null) { is.close(); } } catch (Exception e) { e.printStackTrace(); } } return "file absolute path:" + file.getAbsolutePath(); } else { return "handler is null"; } } else { return "fileName is null"; } } }
復制代碼

?

?

上傳方法和我們以前在Web中上傳唯一不同的就是參數一DataHandler,可以將這類看成文件傳輸器,他可以把文件序列化。然后通過DataHandler可以得到一個輸入流InputStream,通過這個流可以讀到文件的內容。其他的操作和普通上傳類似。

2、 定制wsdd發布文件上傳的WebService服務

?

復制代碼
 
<?xml version="1.0" encoding="UTF-8"?> <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="UploadFile" provider="java:RPC"> <parameter name="className" value="com.hoo.service.UploadFileService" /> <parameter name="allowedMethods" value="*" /> <parameter name="scope" value="Session" /> <!-- 和服務器端上傳文件的方法簽名對應,參數也對應 --> <operation name="upload" qname="operNS:upload" xmlns:operNS="upload" returnType="rns:string" xmlns:rns="http://www.w3.org/2001/XMLSchema"> <parameter name="handler" type="ns:DataHandler" xmlns:ns="http://www.w3.org/2001/XMLSchema"/> <parameter name="fileName" type="ns:string" xmlns:ns="http://www.w3.org/2001/XMLSchema"/> </operation> <typeMapping qname="hns:DataHandler" xmlns:hns="ns:FileUploadHandler" languageSpecificType="java:javax.activation.DataHandler" serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory" deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </service> </deployment>
復制代碼

?

?

上面才xml節點元素在前面都見過了,說明下operation中的參數,注意要指定參數類型,特別是DataHandler的類型,然后就是typeMapping的serializer、deserializer的序列化和反序列化工廠類的配置。

3、 用dos命令發布當前WebService

C:\SoftWare\tomcat-5.0.28\tomcat-5.0.28\webapps\AxisWebService\WEB-INF>java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService deployUpload.wsdd

發布完成后,可以通過這個地址查看uploadFile這個service了

http://localhost:8080/AxisWebService/servlet/AxisServlet

4、 編寫客戶端代碼

?

復制代碼
 
package com.hoo.client; import java.rmi.RemoteException; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory; import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory; /** * <b>function:</b>上傳文件WebService客戶端 * * @author hoojo * @createDate Dec 18, 2010 1:38:14 PM * @file UploadFileClient.java * @package com.hoo.client * @project AxisWebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class UploadFileClient { public static void main(String[] args) throws ServiceException, RemoteException { String url = "http://localhost:8080/AxisWebService/services/UploadFile"; String fileName = "readMe.txt"; String path = System.getProperty("user.dir") + "\\WebRoot\\" + fileName; System.out.println(path); //這樣就相當于構造了一個帶文件路徑的File了 DataHandler handler = new DataHandler(new FileDataSource(path)); Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(url); /** * 注冊異常類信息和序列化類 ns:FileUploadHandler 和 wsdd 配置文件中的typeMapping中的xmlns:hns="ns:FileUploadHandler" 的對應 DataHandler * 和 wsdd 配置文件中的typeMapping中的qname="hns:DataHandler"的DataHandler對應 */ QName qn = new QName("ns:FileUploadHandler", "DataHandler"); call.registerTypeMapping(DataHandler.class, qn, JAFDataHandlerSerializerFactory.class, JAFDataHandlerDeserializerFactory.class); call.setOperationName(new QName(url, "upload")); //設置方法形參,注意的是參數1的type的DataHandler類型的,和上面的qn的類型是一樣的 call.addParameter("handler", qn, ParameterMode.IN); call.addParameter("fileName", XMLType.XSD_STRING, ParameterMode.IN); //設置返回值類型,下面2種方法都可以 call.setReturnClass(String.class); //call.setReturnType(XMLType.XSD_STRING); String result = (String) call.invoke(new Object[] { handler, "remote_server_readMe.txt" }); System.out.println(result); } }
復制代碼

?

?

至此,文件傳輸就完成了。怎么樣,還不錯吧!

如果你用myEclipse進行開發的話,運行時可能會出現以下的錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

原因是jar包版本不統一,解決方法如下:

刪除Java EE 5 Libraries/javaee.jar/mail里的包有東西.

具體方法如下:

用rar打開X:/Program Files/MyEclipse 6.0/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.0.1.zmyeclipse601200710/data/libraryset/EE_5/javaee.jar,然后刪除mail,一切就ok了.

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451112.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451112.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451112.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Django框架-Form組件

一、DjangoForm組件介紹 我們之前在html頁面中利用form表單向后端提交數據時&#xff0c;都會寫一些獲取用戶輸入的標簽并且用form標簽把它們包起來。 與此同時我們在好多場景下都需要對用戶的輸入做校驗&#xff0c;比如驗證用戶是否輸入&#xff0c;輸入的長度和格式等是否正…

中國經濟轉型知易行難

摘要&#xff1a;一個亞洲國家正在崛起&#xff0c;出口機器勢不可擋&#xff0c;財富快速增長&#xff0c;覺得美國已是過去&#xff0c;自己的時代已經到來。這是2012年的中國&#xff1f;沒錯———但也是上世紀80年代的日本。 美國《芝加哥論壇報》網站5月20日文章&#xf…

進程和線程的剖析

進程和線程的區別&#xff1f;什么時候用進程&#xff1f;什么時候用線程&#xff1f; 答&#xff1a;首先得知道什么是進程什么是線程&#xff1f; 我的理解是進程是指在系統中正在運行的一個應用程序&#xff1b;程序一旦運行就是進程&#xff0c;或者更專業化來說&#xff1…

解決 java.net.ConnectException: Connection refused: connect 異常

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、 我的情況很簡單&#xff1a; 只是因為我調用服務端接口方法包名沒有寫對&#xff0c;應該如下面代碼中這樣寫&#xff1a; call.…

主席樹的各類模板(區間第k大數【動,靜】,區間不同數的個數,區間=k的個數)...

取板粗 好東西來的 1.&#xff08;HDOJ2665&#xff09;http://acm.hdu.edu.cn/showproblem.php?pid2665 &#xff08;POJ2104&#xff09;http://poj.org/problem?id2104 &#xff08;POJ2761&#xff09;http://poj.org/problem?id2761 題意&#xff1a;求區間第K大&…

java類內部的變量

類內部的變量分為兩部分&#xff1a; 一.類的成員變量 在類內部&#xff0c;變量定義部分&#xff0c;定義的變量。 二.局部變量 在類內方法體中定義的變量和方法中涉及的變量。 成員變量和局部變量的區別&#xff1a; &#xff08;1&#xff09;成員變量在整個類中都有效…

騰訊搜搜退出PC搜索領域:百度搜狗迎來雙龍競爭

摘要&#xff1a;據北京商報報道&#xff0c;上周末&#xff0c;騰訊對公司組織架構進行了大規模調整。業內普遍認為&#xff0c;搜搜并入騰訊無線后&#xff0c;這個獨立搜索平臺將被合并&#xff0c;失去獨立性&#xff0c;也將令搜搜官網域名soso.com走向“沒落”。據北京商…

facade-pattern外觀模式

外觀模式&#xff1a; 外觀模式是面向對象編程中的重要設計模式。外觀類用來掩蓋復雜的內部邏輯&#xff0c;為用戶提供簡潔統一的服務接口。外觀類的主要功能如下&#xff1a; 1.通過提供簡明的對外API接口&#xff0c;來提高程序的可閱讀性和間接性。 2.提供通用的特定功能…

Web Service 客戶端,調用服務方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 只是最簡單的調用web service 服務&#xff0c;至于要傳什么參數全看到業務了。 以下是最簡單的調用方式 &#xff1a; package hdmp…

分享Spring Cloud分布式微服務架構圖

分布式、微服務、云架構JAVA語言開發、跨平臺、高性能、高可用、安全、服務化、模塊化、組件化、驅動式開發模式 從現在開始&#xff0c;我這邊會將近期研發的springcloud微服務云架構的搭建過程和精髓記錄下來&#xff0c;幫助更多有興趣研發spring cloud框架的朋友&#xff0…

返回一個list的全部 倒敘排列的方法

#反向迭代一個listlist[2,4,6,4,3,7,5,45,23,6,5,32,6,52,324,23,65,76,3,234,6,3,4,356,7,74,234,35,7,86]def funrev(list): list1[] for i in range(len(list)): list1.append(list[-i-1]) print(list1) return list1print(************************)lis…

互聯網手機潮進入PK時代:周鴻祎激戰小米雷軍

摘要&#xff1a;事實上&#xff0c;周鴻祎本人也多次強調&#xff0c;對于對手他一向實事求是&#xff0c;“對小米手機這種模式持肯定態度&#xff0c;它是第一個做互聯網手機的”。花費精力做出漂亮的銷售業績&#xff0c;這是互聯網手機最關鍵命題&#xff0c;配置戰、價格…

很多人問為什么使用聯合索引,為什么不建兩個單獨的索引呢?

So why not just create two indexes, one on last_name and one on first_name? You could do that, but MySQL won’t use them both at the same time. In fact, MySQL will only ever use one index per table per query—except for UNIONs.[3] This fact is important e…

oracle表被鎖了怎么處理

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 首先你要知道表鎖住了是不是正常鎖&#xff1f;因為任何DML語句都會對表加鎖。你要先查一下是那個會話那個sql鎖住了表&#xff0c;有可…

Lyft Level 5 Challenge 2018 - Elimination Round翻車記

打猝死場感覺非常作死。 A&#xff1a;判一下起點和終點是否在其兩側即可。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() {int x0,…

mysql用戶的權限分配

2019獨角獸企業重金招聘Python工程師標準>>> 因今天在分配數據庫權限的時候&#xff0c;同事反映賬戶不能使用函數&#xff0c;遂搜集資料總結了一番關于mysql用戶的權限分配。 MySQL 賦予用戶權限命令的簡單格式可概括為&#xff1a; grant 權限 on 數據庫對象 to …

小米360口水戰背后:國產手機第三態誕生

摘要&#xff1a;按照雙方公布的配置信息&#xff0c;小米手機青春版為1.2G H z雙核處理器&#xff0c;華為閃耀為1G H z雙核。種向市場投入海量推廣資金&#xff0c;以換取產品上的高利潤&#xff0c;代表為步步高、金立、O PPO。南都制圖&#xff1a;宋小偉 互聯網入侵通信業…

java bean轉map

一.使用Apache提供的BeanUtils public Map test(Object person) {Map map BeanUtils.describe(person);return map; } 二.使用Jackson public Map test(Object person) {ObjectMapper objectMapper new ObjectMapper(); Map map objectMapper.convertValue(person, HashM…

java中ftp文件上傳和中文亂碼解決

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 前幾天 有個需求就是上傳文件的時候&#xff0c;本地存一份&#xff0c;其他服務器也保存一份&#xff0c;于是就研究了一下&#xff0c…

線段與多邊形的關系

轉自周見智 介紹 最近項目中要用到有關幾何&#xff08;Geometry&#xff09;方面的知識&#xff0c;程序需要判斷給定的一條線段&#xff08;Segment&#xff09;與指定多邊形&#xff08;Polygon&#xff09;的位置關系。這種關系分為三種&#xff1a;多邊形包含線段、多邊形…