當前位置:編程學習大全網 - 源碼下載 - 如何通過Web服務上傳和歸檔

如何通過Web服務上傳和歸檔

隨著互聯網技術的發展和跨平臺需求的增加,Web服務的應用越來越廣泛。我們不僅需要通過Web服務傳輸字符串信息,還需要傳輸二進制文件信息。下面我們將分別介紹如何通過Web服務將文件從服務器下載到客戶端,以及將文件從客戶端上傳到服務器。

通過Web服務顯示和下載文件

我們在這裏建立的Web服務的名稱為GetBinaryFile提供了兩個公共方法:GetImage()和GetImageType()。前者返回二進制文件字節數組,後者返回文件類型,其中GetImage()。該方法有壹個參數,用於選擇要在客戶端顯示或下載的文件的名稱。在這裏,我們顯示和下載的文件不能在虛擬目錄中。這種方法的優點是可以根據權限顯示和下載文件。從下面的方法可以看出,實際的文件位置並不在虛擬目錄中,這樣可以更好的控制文件的權限,在安全性高的情況下特別有用。在之前的ASP程序中,可以通過流對象來實現。為了方便讀者測試,這裏列出了所有的源代碼,並在源代碼中進行了介紹和註釋。

首先,建立壹個GetBinaryFile * * * x文件。

我們可以在VS NET中新建壹個C#的aspxWebCS項目,然後添加壹個新項選擇Web服務並設置文件名為GetBinaryFile a *** x,在視圖代碼中輸入以下代碼,即GetBinaryFile a *** x cs。

使用系統;

使用系統集合;

使用系統組件模型;

使用系統數據;

使用系統診斷;

使用系統網站;

使用系統Web用戶界面;

使用系統網絡服務;

使用系統IO;

命名空間aspxWebCS

{

///

///get binary文件的摘要說明

/// Web服務名稱GetBinaryFile

///該函數返回服務器上文件對象的二進制字節數組。

///

[web服務(命名空間=

描述=使用. NET Framework在Web服務中傳輸二進制文件)]

公共類GetBinaryFile:系統Web服務WebService

{

#區域組件設計器生成的代碼

//對於//Web服務設計器是必需的

private IContainer組件= null

///

///清理所有正在使用的資源。

///

受保護的覆蓋void Dispose( bool disposing)

{

如果(處置& amp& amp成分!=空)

{

組件Dispose();

}

base Dispose(處置);

}

#結束區域

公共類圖像:系統Web服務Web服務

{

///

///Web服務提供的方法返回給定文件的字節數組。

///

[webmethod(描述= web服務提供的方法返回給定文件的字節數組)]

公共字節[] GetImage(字符串requestFileName)

{

///獲取服務器的圖片。

///如果自己測試,註意修改下面的實際物理路徑。

if(請求文件名== null ||請求文件名==)

返回getBinaryFile(D:\圖片JPG);

其他

返回getBinaryFile(D:\+request filename);

}

///

/// getBinaryFile返回給定文件路徑的字節數組。

///

///

public byte[] getBinaryFile(字符串文件名)

{

如果(文件存在(文件名))

{

嘗試

{

///打開現有文件進行讀取。

FileStream s = File OpenRead(文件名);

返回ConvertStreamToByteBuffer

}

捕捉(例外e)

{

返回新字節[];

}

}

其他

{

返回新字節[];

}

}

///

//// ConvertStreamToByteBuffer將給定的文件流轉換為二進制字節數組。

///

///

public byte[]ConvertStreamToByteBuffer(系統IO流Stream)

{

int b;

System IO memory stream tempStream =新系統IO memory stream();

while((b =theStream ReadByte())!= )

{

tempStream write byte((byte)b));

}

將tempStream返回到array();

}

[webmethod(描述= web服務提供的方法返回給定的文件類型)]

公共字符串GetImageType()

{

///這只是壹個測試。可以根據實際文件類型動態輸出。

返回圖片/jpg;

}

}

}

}

看地址,進入討論組討論。

壹旦我們創建了上面的壹個*** x文件並編譯它,我們就可以編寫客戶端代碼來調用這個Web服務。

我們先添加壹個Web引用,輸入下面的中間文件GetBinaryFileShow aspx,這是顯示文件。在這裏,我們只需要在post代碼中編寫代碼來獲取BinaryFileShow aspx cs。該文件的內容如下。

使用系統;

使用系統集合;

使用系統組件模型;

使用系統數據;

使用系統繪圖;

使用系統網站;

使用系統Web會話狀態;

使用系統Web用戶界面;

使用系統Web用戶界面Web控件;

使用系統Web用戶界面HtmlControls

使用系統網絡服務;

命名空間aspxWebCS

{

///

/// GetBinaryFileShow的摘要說明

///

公共類GetBinaryFileShow:系統Web UI頁面

{

私有void Page_Load(對象發送者系統EventArgs e)

{

//將用戶代碼放在這裏以初始化頁面。

///定義和初始化文件對象

aspx webcs GetBinaryFile Images oImage;

oImage = new aspx webcs GetBinaryFile Images();

///獲取二進制文件字節數組

byte[]image = oImage GetImage();

///轉換為支持內存存儲的流。

系統IO內存流memStream =新系統IO內存流(image);

///定義並實例化位圖對象

Bitmap bm =新位圖(memStream);

///根據不同條件輸出或下載。

響應Clear();

///如果請求字符串指定下載,則下載文件。

///否則會顯示在瀏覽器中。

if(請求QueryString[下載]==)

{

響應緩沖區= true

響應內容類型=應用程序/八位字節流;

///這裏下載輸出的文件名是ok jpg為例。妳其實可以根據情況動態決定。

Response AddHeader(內容處理附件;filename = ok jpg);

}

其他

response content type = oImage GetImageType();

響應binary write(image);

響應結束();

}

#區域Web窗體設計器生成的代碼

覆蓋受保護的void OnInit(EventArgs e)

{

//

// CODEGEN這個調用是ASP NEeb表單設計器所必需的。

//

initialize component();

base on init(e);

}

///

///設計器支持所需的方法,所以不要使用代碼編輯器修改它們。

///此方法的內容

///

私有void InitializeComponent()

{

this Load +=新系統EventHandler(this Page _ Load);

}

#結束區域

}

}

最後我們會寫最終的瀏覽頁面GetBinaryFile aspx,非常簡單,只需要aspx文件。內容如下。

& lt% @ Page language = " c# " code behind = " getbinaryfile . aspx . cs " AutoEventWireup = " false "

Inherits="aspxWebCS。GetBinaryFile " % & gtinherits = aspx webcs GetBinaryFile % & gt;

runat = server & gtrunat = server & gt下載文件

集合地址:進入討論組討論

使用系統;

使用系統集合;

使用系統組件模型;

使用系統數據;

使用系統診斷;

使用系統網站;

使用系統網絡服務;

使用系統IO;

命名空間aspxWebCS

{

///

///上傳的摘要描述

///

[web服務(命名空間=

描述=使用. NET framework在Web服務中上傳文件]

公共類上傳:系統Web服務Web服務

{

公共上傳()

{

//CODEGEN ASP NEeb服務設計器需要此調用。

initialize component();

}

#區域組件設計器生成的代碼

//對於//Web服務設計器是必需的

private IContainer組件= null

///

///設計器支持所需的方法,所以不要使用代碼編輯器修改它們。

///此方法的內容

///

私有void InitializeComponent()

{

}

///

///清理所有正在使用的資源。

///

受保護的覆蓋void Dispose( bool disposing)

{

如果(處置& amp& amp成分!=空)

{

組件Dispose();

}

base Dispose(處置);

}

#結束區域

[web method(description = web服務提供的方法返回文件是否上傳成功)]

公共字符串上傳文件(byte[] fs字符串文件名)

{

嘗試

{

///定義並實例化壹個內存流來存儲提交的字節數組。

MemoryStream m =新內存流(fs);

///定義實際的file對象來保存上傳的文件。

FileStream f =新文件流(服務器映射路徑()+ \

+文件名FileMode Create);

///將內存中的數據寫入物理文件。

m write to(f);

m Close();

f Close();

f =空;

m =空;

返回文件已成功上傳;

}

catch(例外ex)

{

返回ex消息;

}

}

}

}

使用系統;

使用系統集合;

使用系統組件模型;

使用系統數據;

使用系統繪圖;

使用系統網站;

使用系統Web會話狀態;

使用系統Web用戶界面;

使用系統Web用戶界面Web控件;

使用系統Web用戶界面HtmlControls

使用系統網絡服務;

使用系統IO;

命名空間aspxWebCS

{

///

///上傳的摘要描述

///使用此方法通過Web服務上傳文件。

///

公共課加載:系統Web用戶界面頁

{

受保護的系統Web UI html controls html input file my file;

受保護的系統Web UI WebControls按鈕按鈕;

私有void Page_Load(對象發送者系統EventArgs e)

{

//將用戶代碼放在這裏以初始化頁面。

}

#區域Web窗體設計器生成的代碼

覆蓋受保護的void OnInit(EventArgs e)

{

//

// CODEGEN這個調用是ASP NEeb表單設計器所必需的。

//

initialize component();

base on init(e);

}

///

///設計器支持所需的方法,所以不要使用代碼編輯器修改它們。

///此方法的內容

///

私有void InitializeComponent()

{

本按鈕Click +=新系統事件處理程序(本按鈕_ Click);

this Load +=新系統EventHandler(this Page _ Load);

}

#結束區域

私有void Button _Click(對象發送者系統EventArgs e)

{

///首先獲取上傳的文件信息和文件流。

if(MyFile PostedFile!=空)

{

系統Web http file文件集合;

oFiles = System Web HttpContext當前請求文件;

if(of files Count & lt;)

{

回復寫(請選擇壹個文件);

響應結束();

}

string file path = of iles[]FileName;

if(FilePath == || FilePath == null)

{

回復寫(請選擇壹個文件);

響應結束();

}

string FileName = file path Substring(file path LastIndexOf(\)+);

嘗試

{

///正在處理上傳的文件流信息

byte[] b =新字節[oFiles[]ContentLength];

系統IO流fs;

aspxWebCS上傳o;

o = new aspx webcs Upload();

fs =(系統IO流)of files[]InputStream;

fs Read(b of iles[]content length);

///調用Web服務的UploadFile方法上傳文件。

響應寫(o UploadFile(b FileName));

fs Close();

}

catch(例外ex)

{

響應寫(ex消息);

}

}

其他

{

回復寫(請選擇壹個文件);

}

}

}

}

最後要註意的是,在保存文件時,您應該確保指定了文件的完整路徑(例如,C:myfilespacture jpg ),並為ASP NET使用的帳戶提供對文件存儲目錄的寫權限。上載大文件時,可以使用元素的maxRequestLength屬性來增加允許的最大文件大小,其中maxReques。TLength表示ASP NET支持的HTTP上載的最大字節數。此限制可用於防止由於用戶向此服務器傳遞大量文件而導致的拒絕服務攻擊。指定的大小以KB為單位,默認值為KB (MB)。ExecutionTimeout指示在ASP NET自動關閉請求之前,允許執行請求的最大秒數。如果文件超過指定大小時瀏覽器中出現DNS錯誤或服務不可用,請修改上述配置以增加配置數量。

此外,上傳大文件時,您可能會收到以下錯誤消息。

aspnet _ WP . exe(PID:)被回收,因為內存消耗超過了MB(可用RAM的百分比)。

如果遇到此錯誤信息,請增加應用程序的nfig文件的元素中memoryLimit屬性的值。

Lishi Xinzhi/Article/program/net/201311/12410

  • 上一篇:安卓4.0有哪些功能?
  • 下一篇:網站代碼溢出怎麽解決?
  • copyright 2024編程學習大全網