導航:首頁 > 文件教程 > cwebservice上傳文件

cwebservice上傳文件

發布時間:2023-01-18 12:07:24

『壹』 webservice能傳文件

當然可以傳附件了、、。。。
axis用過吧?版本1就可以
將你要傳送的文件封裝在DataHandler中,然後將DataHandler對象或DataHandler數組(多個文件傳送的時候)作為客戶端調用函數的參數(從客戶端上傳文件到伺服器)Axis服務的返回類型(從伺服器端下載文件到客戶端)進行傳輸。
1.服務端程序

假設傳輸多個文件:在伺服器端將文件取出來,並將文件封裝在DataHandler數組中。
代碼如下:

DataHandler[] ret = new DataHandler[totalFileNum];
... ...
java.io.File myFile = new java.io.File(filePath);
if(myFile.isFile() && myFile.canRead())
{
String fname = myFile.getAbsoluteFile().getCanonicalPath();
DataHandler[0] = new DataHandler(new FileDataSource(fname));
}
... ...

return ret;

2. 客戶端的訪問:

代碼如下:
Service service = new Service();
Call call = (Call) service.createCall();

URL myURL = new URL("http://192.168.0.26:8080/axis/servlet/AxisServlet");
call.setTargetEndpointAddress(myURL); //設定服務的主機和位置
call.setOperationName(new QName("urn:MyAttachServer","echoDir")); //設置要調用的服務的方法
QName qnameAttachment = new QName("urn:MyAttachServer","DataHandler");

call.registerTypeMapping(DataHandler.class, qnameAttachment, .class,.class); //為附件(即DataHandler類)創建序列化生成器

call.addParameter("source", XMLType.XSD_STRING ,ParameterMode.IN); //設置服務調用方法的傳入參數類型
call.setReturnType(XMLType.SOAP_ARRAY); //設置調用服務方法的返回類型,由於返回的是DataHandler數組,所以設置為SOAP_ARRAY類型
javax.activation.DataHandler[] ret = (javax.activation.DataHandler[])call.invoke(new Object[]{null}); //調用方法

for (i = 0; i < ret.length; ++i)
{
DataHandler recDH = ret[i];
java.io.File receivedFile = new java.io.File(recDH.getName()); //文件生成
}

3. 服務的部署:

注意:你要在部署的時候,定義DataHandler的序列化生成器。

編寫deploy.wsdd文件:

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:ns1="urn:att_STC_Server" >
<service name="urn:att_STC_Server" provider="java:RPC" >
<parameter name="className" value="samples.att_STC.att_STC_Server"/>
<parameter name="allowedMethods" value="echoDir"/>

<typeMapping deserializer="org.apache.axis.encoding.ser."
languageSpecificType="java:javax.activation.DataHandler" qname="ns1:DataHandler"
serializer="org.apache.axis.encoding.ser."
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</service>

</deployment>

自己試試。

『貳』 怎麼用WebService傳輸XML文件

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 [email protected]
* @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." deserializer="org.apache.axis.encoding.ser." 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.;
import org.apache.axis.encoding.ser.;

/**
* <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 [email protected]
* @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,
.class,
.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了.

『叄』 C#我用webservice做上傳文件報了個這樣的錯,誰能幫幫我

你先遠程訪問一下那個機器,然後就會跳出輸入用戶名和密碼的了,那個的時候時候,點擊【記住】應該就可以了

『肆』 在c#中 如何使用webservice上傳文件並載入到資料庫

文件只能上傳的伺服器的某個文件夾下,資料庫中只能保存上傳的路徑

『伍』 調用webservice方法的時候怎麼把附件發送過去

2. WEB Service 開發
2.1. 服務配置
Asp.Net 一般支持上傳4MB大小文件,為實現上傳超過4MB大小文件,Asp.Net項目需要調整配置(Web.Config)的httpRuntime節點。
<httpRuntime maxRequestLength="40960" executionTimeout="1800" />
maxRequestLength:指定輸入流緩沖閾值限制(以 KB 為單位)。此限制可用於防止拒絕服務攻擊;例如,因用戶向伺服器發送大型文件而導致的拒絕服務攻擊。
默認值為 4096 (4 MB)。
executionTimeout: 指定在被 ASP.NET 自動關閉前,允許執行請求的最大秒數。默認值110秒。
2.2. 服務開發
本人採用接收位元組的方式開發Web Service,提供是創建還是累加參數,根據參數將文件位元組寫入文件中。示例代碼如下:

3. WinForm 程序開發
WinForm是·Net開發平台中對Windows Form的一種稱謂。新增WinForm程序項目,添加文件上傳服務引用。

3.1. Winform 程序實現效果
程序界面簡單設計為:選擇文件按鈕,選擇文件列表,上傳文件按鈕、上傳信息及上傳進度。

3.2. Winform 上傳文件效果
示例演示:選擇兩大於4MB文件進行上傳,上傳成功。

3.3. 文件上傳關鍵源碼
localhost.WebService mWebService = new WinTest.localhost.WebService();
mWebService.CookieContainer = new System.Net.CookieContainer();
mWebService.Timeout =- 1;

對 XML Web services 的同步調用的超時(以毫秒為單位)。默認為 100000 毫秒。提示:如果將 Timeout 屬性設置為 Timeout =-1,則指示該請求無超時。

『陸』 利用webservice怎麼上傳文件

1. Web Service 簡介
Web Service是一個平台獨立的,低耦合的,自包含的、基於可編程的web的應用程序,可使用開放的XML(標准通用標記語言下的一個子集)標准來描述、發布、發現、協調和配置這些應用程序,用於開發分布式的互操作的應用程序。
Web Service技術, 能使得運行在不同機器上的不同應用無須藉助附加的、專門的第三方軟體或硬體, 就可相互交換數據或集成。依據Web Service規范實施的應用之間, 無論它們所使用的語言、 平台或內部協議是什麼, 都可以相互交換數據。Web Service是自描述、 自包含的可用網路模塊, 可以執行具體的業務功能。Web Service也很容易部署, 因為它們基於一些常規的產業標准以及已有的一些技術,諸如標准通用標記語言下的子集XML、HTTP。Web Service減少了應用介面的花費。Web Service為整個企業甚至多個組織之間的業務流程的集成提供了一個通用機制。
(Web Service 在此不做過多介紹,具體介紹可網路下)
2. WEB Service 開發
2.1. 服務配置
Asp.Net 一般支持上傳4MB大小文件,為實現上傳超過4MB大小文件,Asp.Net項目需要調整配置(Web.Config)的httpRuntime節點。
<httpRuntime maxRequestLength="40960" executionTimeout="1800" />
maxRequestLength:指定輸入流緩沖閾值限制(以 KB 為單位)。此限制可用於防止拒絕服務攻擊;例如,因用戶向伺服器發送大型文件而導致的拒絕服務攻擊。
默認值為 4096 (4 MB)。
executionTimeout: 指定在被 ASP.NET 自動關閉前,允許執行請求的最大秒數。默認值110秒。
2.2. 服務開發
本人採用接收位元組的方式開發Web Service,提供是創建還是累加參數,根據參數將文件位元組寫入文件中。示例代碼如下:

3. WinForm 程序開發
WinForm是·Net開發平台中對Windows Form的一種稱謂。新增WinForm程序項目,添加文件上傳服務引用。

3.1. Winform 程序實現效果
程序界面簡單設計為:選擇文件按鈕,選擇文件列表,上傳文件按鈕、上傳信息及上傳進度。

『柒』 如何使用web server上傳文檔

我想會有好多人也會遇到這個問題,我的這個解決方法,在一定程度上可以解決一些問題.(^_^),關於身份模擬請參考msdn中的描述。此程序片段不包含目錄驗證的代碼.
這個問題困擾了我好久.我曾經嘗試過多種方法.但一樣的程序,在windows應用程序里運行就ok,一放到webservice里就出問題了.(不過今天晚上又測試了多次,證明我的方法是有效的,興奮中....)
以下是通過文件監控的方式實現的文件上傳程序代碼:(裡面採用了模擬windows用戶的方式模擬當前的操作用戶)
private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
{
Application.DoEvents();
WindowsImpersonationContext wic = null;
if( wic != null ) wic.Undo();
try
{
System.IO.File.Copy(e.FullPath,"c://AresTemp//"+e.Name,true);
FileStream fStream;
fStream= File.OpenRead("c://AresTemp//"+e.Name);
byte[] contents = new byte[fStream.Length];
fStream.Read(contents, 0, (int)fStream.Length);
fStream.Close();
if(File.Exists("c://AresTemp//"+e.Name)==true)
{
File.Delete("c://AresTemp//"+e.Name);
}

wic =SPUtil.GetWindowsIdentity();
SPWeb myweb=new SPSite(SharePointURL).OpenWeb();
myweb.AllowUnsafeUpdates=true;

myweb.Files.Add(SharePointURL+"/"+e.Name,contents,true);
// if (File.Exists(e.FullPath))
// File.Delete(e.FullPath);
if( wic != null ) wic.Undo();
AresLog.recordLog("文件上傳成功","","",e.Name ,e.FullPath);

}
catch(Exception ee)
{
if( wic != null ) wic.Undo();
AresLog.recordLog("上傳文件異常","","",ee.Message,ee.StackTrace);
}
}
以下是我寫的通過ftp的方式,將文件傳輸到本地,然後讀取本地磁碟文件,上傳到sharpoint文檔庫的代碼:(需要注意域名的書寫,此代碼已經過本機測試成功,但具體環境不同,也可能造成一定的差異)
[WebMethod]
public string UpLoadFilesToSPS(string FtpServer,string FtpUser,string FtpPwd,string FtpPath,string FilesName,string FilesInfo,string targetUrl)
{
//ftp settings
FtpClient myFTP=new FtpClient();
myFTP.Server=FtpServer;
myFTP.Username=FtpUser;
myFTP.Password=FtpPwd;
myFTP.RemotePath=FtpPath;
//filePath,info
string[] fName=Microsoft.VisualBasic.Strings.Split(FilesName,";",-1,Microsoft.VisualBasic.CompareMethod.Text);
string[] fInfo=Microsoft.VisualBasic.Strings.Split(FilesInfo,";",-1,Microsoft.VisualBasic.CompareMethod.Text);
int i=0;
//檢查和創建本地環境
if(Directory.Exists("C://AresTemp")==false)
{
Directory.CreateDirectory("C://AresTemp");
}
foreach(string fDirectory in fInfo)
{
if(Directory.Exists("C://AresTemp//"+fDirectory)==false)
{
Directory.CreateDirectory("C://AresTemp//"+fDirectory);
}
}
//文件下載
for(i=0;i<fName.Length;i++)
{
myFTP.DownloadEx(fName[i],"C://AresTemp//"+fInfo[i]+"//"+fName[i],true);
}
myFTP.Close();
WindowsImpersonationContext wic = null;

if( wic != null ) wic.Undo();
//獲取模擬用戶信息
ZSoft.WindowsImpersonation.WIUser myUser=new ZSoft.WindowsImpersonation.WIUser(ServerUser,ServerName,ServerPassword);
myUser.impersonateValidUser();
wic =myUser.wic;
SPWeb myweb=new SPSite(targetUrl).OpenWeb();
myweb.AllowUnsafeUpdates=true;
for(i=0;i<fName.Length;i++)
{
FileStream fStream;
fStream= File.OpenRead("c://AresTemp//"+fInfo[i]+"//"+fName[i]);
byte[] contents = new byte[fStream.Length];
fStream.Read(contents, 0, (int)fStream.Length);
fStream.Close();
myweb.Files.Add(targetUrl+"/"+fInfo[i]+"//"+fName[i],contents,true);
}
myweb.Close();
if( wic != null ) wic.Undo();
return "文件傳輸成功!";
}

『捌』 C#使用webservice把文件上傳到伺服器

C#使用webservice把文件上傳到伺服器的代碼如下(這里以C:\.jpg這個文件上傳為例):

WebService部分:

///<summary>
///保存文件到遠程伺服器
///</summary>
///<paramname="FileByteArray">待轉換位元組數組</param>
///<paramname="FileLength">位元組長度</param>
///<paramname="SaveToUrl">保存路徑</param>
///<returns>返回是否執行成功</returns>
[WebMethod(Description="保存文件到遠程伺服器.")]
publicboolSaveFile(byte[]FileByteArray,intFileLength,stringSaveToUrl)
{
try
{
FileStreamfs=newFileStream(SaveToUrl,FileMode.OpenOrCreate,FileAccess.Write);
fs.Write(FileByteArray,0,FileLength);
fs.Close();
}
catch{
returnfalse;
}
returntrue;
}

上傳文件調用部分:

protectedvoidButton1_Click(objectsender,EventArgse)
{
MangerPhoto.Servicemp=newMangerPhoto.Service();
Response.Write(mp.SaveFile(getByte(),FileUpload1.PostedFile.ContentLength,"C:\.jpg"));
}privatebyte[]getByte(){//獲得轉化後的位元組數組
//得到用戶要上傳的文件名
stringstrFilePathName=FileUpload1.PostedFile.FileName;
stringstrFileName=Path.GetFileName(strFilePathName);
intFileLength=FileUpload1.PostedFile.ContentLength;
//上傳文件
Byte[]FileByteArray=newByte[FileLength];//圖象文件臨時儲存Byte數組
StreamStreamObject=FileUpload1.PostedFile.InputStream;//建立數據流對像
//讀取圖象文件數據,FileByteArray為數據儲存體,0為數據指針位置、FileLnegth為數據長度
StreamObject.Read(FileByteArray,0,FileLength);
returnFileByteArray;
}

『玖』 winform如何向webservice傳數據

思路是從本地讀取一個文件的,得到這個文件的位元組數組,然後把位元組數組傳給到Web Service的方法,如果是多文件上傳的話,Web Service接受的方法應該變為一個List<byte []>,在客戶端更新Web Service後調用這個方法的時候,發現這個參數的類型變成了一個
ArrayOfBase64Binary類型,很奇怪,這個具體是什麼意思我沒太查過,不過操作起來也蠻簡單的,聲明一個對象,然後obj.Add(byte[])就可以了,經過這樣一個步驟以後基本的框架就出來了,下面說一些細節的東西:

1. Web Service 與客戶端的數據交換是有個限制的, 解決方法如下
節點下面即 可,maxRequestLength可以按照你的需要變化,但是千萬不到吧這個數寫的太大,那樣的話即便在Web Service Build的時候不報錯也會在在客戶端引用的時候就會報錯.
2. FileStream會 根據文件類型進行自動轉化,當我做到這的時候陷入了一個誤區,在文件格式轉換的問題上繞圈

『拾』 如何通過WebService批量上傳多個大文件

批量,就是循環進行了。

閱讀全文

與cwebservice上傳文件相關的資料

熱點內容
java將數字轉換成字母 瀏覽:854
c盤中的哪些是系統文件夾 瀏覽:668
分布式服務如何跨庫統計數據 瀏覽:829
力控轉發數據客戶端模式如何建立 瀏覽:200
怎麼樣讓自己的網站不被別人看到 瀏覽:711
編程擴展效果如何 瀏覽:335
榮耀暢玩手環同步qq 瀏覽:475
怎麼向sql中添加資料庫 瀏覽:596
錄歌失敗重啟app什麼意思 瀏覽:522
壓縮文件包怎麼在微信發送 瀏覽:432
mysql資料庫怎麼插入時間值 瀏覽:191
微信視頻不能轉發朋友圈 瀏覽:596
影視後期的app有哪些 瀏覽:956
電子保單數據出錯什麼意思 瀏覽:368
如何以文件下載音樂 瀏覽:438
計算機網路章節練習 瀏覽:999
單片機的外部中斷程序 瀏覽:48
表格批量更名找不到指定文件 瀏覽:869
js的elseif 瀏覽:584
3dmaxvray視頻教程 瀏覽:905

友情鏈接