asp.net Web Services上傳和下載文件(完整代碼)第1/2頁(yè)
更新時(shí)間:2008年12月19日 12:40:45 作者:
隨著Internet技術(shù)的發(fā)展和跨平臺(tái)需求的日益增加,Web Services的應(yīng)用越來(lái)越廣,我們不但需要通過Web Services傳遞字符串信息,而且需要傳遞二進(jìn)制文件信息。
下面,我們就分別介紹如何通過Web Services從服務(wù)器下載文件到客戶端和從客戶端通過Web Services上載文件到服務(wù)器。
一:通過Web Services顯示和下載文件
我們這里建立的Web Services的名稱為GetBinaryFile,提供兩個(gè)公共方法:分別是GetImage()和GetImageType(),前者返回二進(jìn)制文件字節(jié)數(shù)組,后者返回文件類型,其中,GetImage()方法有一個(gè)參數(shù),用來(lái)在客戶端選擇要顯示或下載的文件名字。這里我們所顯示和下載的文件可以不在虛擬目錄下,采用這個(gè)方法的好處是:可以根據(jù)權(quán)限對(duì)文件進(jìn)行顯示和下載控制,從下面的方法我們可以看出,實(shí)際的文件位置并沒有在虛擬目錄下,因此可以更好地對(duì)文件進(jìn)行權(quán)限控制,這在對(duì)安全性有比較高的情況下特別有用。這個(gè)功能在以前的ASP程序中可以用Stream對(duì)象實(shí)現(xiàn)。為了方便讀者進(jìn)行測(cè)試,這里列出了全部的源代碼,并在源代碼里進(jìn)行介紹和注釋。
首先,建立GetBinaryFile.asmx文件:
我們可以在VS.NET里新建一個(gè)C#的aspxWebCS工程,然后“添加新項(xiàng)”,選擇“Web服務(wù)”,并設(shè)定文件名為:GetBinaryFile.asmx,在“查看代碼”中輸入以下代碼,即:GetBinaryFile.asmx.cs:
usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Diagnostics;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.Services;
usingSystem.IO;
namespacexml.sz.luohuedu.net.aspxWebCS
{
///<summary>
///GetBinaryFile的摘要說明。
///WebServices名稱:GetBinaryFile
///功能:返回服務(wù)器上的一個(gè)文件對(duì)象的二進(jìn)制字節(jié)數(shù)組。
///</summary>
[WebService(Namespace="http://xml.sz.luohuedu.net/",
Description="在WebServices里利用.NET框架進(jìn)行傳遞二進(jìn)制文件。")]
publicclassGetBinaryFile:System.Web.Services.WebService
{
#regionComponentDesignergeneratedcode
//Web服務(wù)設(shè)計(jì)器所必需的
privateIContainercomponents=null;
///<summary>
///清理所有正在使用的資源。
///</summary>
protectedoverridevoidDispose(booldisposing)
{
if(disposing&&components!=null)
{
components.Dispose();
}
base.Dispose(disposing);
}
#endregion
publicclassImages:System.Web.Services.WebService
{
///<summary>
///Web服務(wù)提供的方法,返回給定文件的字節(jié)數(shù)組。
///</summary>
[WebMethod(Description="Web服務(wù)提供的方法,返回給定文件的字節(jié)數(shù)組")]
publicbyte[]GetImage(stringrequestFileName)
{
///得到服務(wù)器端的一個(gè)圖片
///如果你自己測(cè)試,注意修改下面的實(shí)際物理路徑
if(requestFileName==null||requestFileName=="")
returngetBinaryFile("D:\\Picture.JPG");
else
returngetBinaryFile("D:\\"+requestFileName);
}
///<summary>
///getBinaryFile:返回所給文件路徑的字節(jié)數(shù)組。
///</summary>
///<paramname="filename"></param>
///<returns></returns>
publicbyte[]getBinaryFile(stringfilename)
{
if(File.Exists(filename))
{
try
{
///打開現(xiàn)有文件以進(jìn)行讀取。
FileStreams=File.OpenRead(filename);
returnConvertStreamToByteBuffer(s);
}
catch(Exceptione)
{
returnnewbyte[0];
}
}
else
{
returnnewbyte[0];
}
}
///<summary>
///ConvertStreamToByteBuffer:把給定的文件流轉(zhuǎn)換為二進(jìn)制字節(jié)數(shù)組。
///</summary>
///<paramname="theStream"></param>
///<returns></returns>
publicbyte[]ConvertStreamToByteBuffer(System.IO.StreamtheStream)
{
intb1;
System.IO.MemoryStreamtempStream=newSystem.IO.MemoryStream();
while((b1=theStream.ReadByte())!=-1)
{
tempStream.WriteByte(((byte)b1));
}
returntempStream.ToArray();
}
[WebMethod(Description="Web服務(wù)提供的方法,返回給定文件類型。")]
publicstringGetImageType()
{
///這里只是測(cè)試,您可以根據(jù)實(shí)際的文件類型進(jìn)行動(dòng)態(tài)輸出
return"image/jpg";
}
}
}
}
一:通過Web Services顯示和下載文件
我們這里建立的Web Services的名稱為GetBinaryFile,提供兩個(gè)公共方法:分別是GetImage()和GetImageType(),前者返回二進(jìn)制文件字節(jié)數(shù)組,后者返回文件類型,其中,GetImage()方法有一個(gè)參數(shù),用來(lái)在客戶端選擇要顯示或下載的文件名字。這里我們所顯示和下載的文件可以不在虛擬目錄下,采用這個(gè)方法的好處是:可以根據(jù)權(quán)限對(duì)文件進(jìn)行顯示和下載控制,從下面的方法我們可以看出,實(shí)際的文件位置并沒有在虛擬目錄下,因此可以更好地對(duì)文件進(jìn)行權(quán)限控制,這在對(duì)安全性有比較高的情況下特別有用。這個(gè)功能在以前的ASP程序中可以用Stream對(duì)象實(shí)現(xiàn)。為了方便讀者進(jìn)行測(cè)試,這里列出了全部的源代碼,并在源代碼里進(jìn)行介紹和注釋。
首先,建立GetBinaryFile.asmx文件:
我們可以在VS.NET里新建一個(gè)C#的aspxWebCS工程,然后“添加新項(xiàng)”,選擇“Web服務(wù)”,并設(shè)定文件名為:GetBinaryFile.asmx,在“查看代碼”中輸入以下代碼,即:GetBinaryFile.asmx.cs:
復(fù)制代碼 代碼如下:
usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Diagnostics;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.Services;
usingSystem.IO;
namespacexml.sz.luohuedu.net.aspxWebCS
{
///<summary>
///GetBinaryFile的摘要說明。
///WebServices名稱:GetBinaryFile
///功能:返回服務(wù)器上的一個(gè)文件對(duì)象的二進(jìn)制字節(jié)數(shù)組。
///</summary>
[WebService(Namespace="http://xml.sz.luohuedu.net/",
Description="在WebServices里利用.NET框架進(jìn)行傳遞二進(jìn)制文件。")]
publicclassGetBinaryFile:System.Web.Services.WebService
{
#regionComponentDesignergeneratedcode
//Web服務(wù)設(shè)計(jì)器所必需的
privateIContainercomponents=null;
///<summary>
///清理所有正在使用的資源。
///</summary>
protectedoverridevoidDispose(booldisposing)
{
if(disposing&&components!=null)
{
components.Dispose();
}
base.Dispose(disposing);
}
#endregion
publicclassImages:System.Web.Services.WebService
{
///<summary>
///Web服務(wù)提供的方法,返回給定文件的字節(jié)數(shù)組。
///</summary>
[WebMethod(Description="Web服務(wù)提供的方法,返回給定文件的字節(jié)數(shù)組")]
publicbyte[]GetImage(stringrequestFileName)
{
///得到服務(wù)器端的一個(gè)圖片
///如果你自己測(cè)試,注意修改下面的實(shí)際物理路徑
if(requestFileName==null||requestFileName=="")
returngetBinaryFile("D:\\Picture.JPG");
else
returngetBinaryFile("D:\\"+requestFileName);
}
///<summary>
///getBinaryFile:返回所給文件路徑的字節(jié)數(shù)組。
///</summary>
///<paramname="filename"></param>
///<returns></returns>
publicbyte[]getBinaryFile(stringfilename)
{
if(File.Exists(filename))
{
try
{
///打開現(xiàn)有文件以進(jìn)行讀取。
FileStreams=File.OpenRead(filename);
returnConvertStreamToByteBuffer(s);
}
catch(Exceptione)
{
returnnewbyte[0];
}
}
else
{
returnnewbyte[0];
}
}
///<summary>
///ConvertStreamToByteBuffer:把給定的文件流轉(zhuǎn)換為二進(jìn)制字節(jié)數(shù)組。
///</summary>
///<paramname="theStream"></param>
///<returns></returns>
publicbyte[]ConvertStreamToByteBuffer(System.IO.StreamtheStream)
{
intb1;
System.IO.MemoryStreamtempStream=newSystem.IO.MemoryStream();
while((b1=theStream.ReadByte())!=-1)
{
tempStream.WriteByte(((byte)b1));
}
returntempStream.ToArray();
}
[WebMethod(Description="Web服務(wù)提供的方法,返回給定文件類型。")]
publicstringGetImageType()
{
///這里只是測(cè)試,您可以根據(jù)實(shí)際的文件類型進(jìn)行動(dòng)態(tài)輸出
return"image/jpg";
}
}
}
}
您可能感興趣的文章:
- ASP.NET Core文件上傳與下載實(shí)例(多種上傳方式)
- 擁有網(wǎng)頁(yè)版小U盤 ASP.NET實(shí)現(xiàn)文件上傳與下載功能
- asp.net+jquery.form實(shí)現(xiàn)圖片異步上傳的方法(附j(luò)query.form.js下載)
- Asp.net實(shí)現(xiàn)MVC處理文件的上傳下載功能實(shí)例教程
- asp.net 多文件上傳,兼容IE6/7/8,提供完整代碼下載
- asp.net 上傳或下載當(dāng)文件名包含有特殊字符"#"的處理
- asp.net 上傳下載輸出二進(jìn)制流實(shí)現(xiàn)代碼
- ASP.NET中文件上傳下載方法集合
- ASP.NET實(shí)現(xiàn)文件上傳功能
- ASP.NET Core實(shí)現(xiàn)文件上傳和下載
相關(guān)文章
.Net Core解決WebAPI中返回時(shí)間格式帶T的問題
本文主要介紹了.Net Core解決WebAPI中返回時(shí)間格式帶T的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
asp.net中for和do循環(huán)語(yǔ)句用法分享
文章介紹了兩個(gè)實(shí)例一個(gè)是FOR循環(huán)創(chuàng)建一個(gè)Mandelbrot圖像,循環(huán)結(jié)構(gòu)之DO語(yǔ)句,根據(jù)布爾值的測(cè)試結(jié)果,執(zhí)行相應(yīng)代碼,有需要的朋友可參考一下2012-04-04
asp.net 使用Silverlight操作ASPNETDB數(shù)據(jù)庫(kù)
asp.net下使用Silverlight操作ASPNETDB數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼2010-01-01
LazyCaptcha自定義隨機(jī)驗(yàn)證碼和字體的示例詳解
LazyCaptcha是仿EasyCaptcha和SimpleCaptcha,基于.Net?Standard?2.1的圖形驗(yàn)證碼模塊,這篇文章主要介紹了LazyCaptcha自定義隨機(jī)驗(yàn)證碼和字體?,需要的朋友可以參考下2022-03-03
asp.net下讓Gridview鼠標(biāo)滑過光棒變色效果
Gridview光棒效果 鼠標(biāo)滑過2010-07-07
用擴(kuò)展方法優(yōu)化多條件查詢(不定條件查詢)
在我們開發(fā)過程中,特別是管理系統(tǒng)的開發(fā),經(jīng)常會(huì)遇到多條件查詢(或者叫不定條件查詢)的案例,就是提供給User輸入的查詢條件有多個(gè)不同的查詢欄位,而且,在實(shí)際使用中并不能確定User會(huì)使用哪些條件來(lái)當(dāng)做搜索條件2012-12-12

