asp.NetWeb Servicesファイルのアップロードとダウンロード(フルコード)1/2ページ

3674 ワード

以下では、Webサービスを使用してサーバからクライアントにファイルをダウンロードする方法と、クライアントからWebサービスを使用してサーバにファイルをアップロードする方法について説明します.
一:Webサービスによるファイルの表示とダウンロード
ここで作成したWeb Servicesの名前はGetBinaryFileです.GetImage()とGetImageType()の2つの共通の方法を提供します.前者はバイナリ・ファイルのバイト配列を返し、後者はファイル・タイプを返します.GetImage()メソッドには、クライアントで表示またはダウンロードするファイル名を選択するためのパラメータがあります.ここで、表示およびダウンロードされたファイルは仮想ディレクトリの下になくてもよい.この方法の利点は、権限に基づいてファイルの表示およびダウンロード制御を行うことができることである.以下の方法から、実際のファイル位置は仮想ディレクトリの下にないため、ファイルをよりよく権限制御することができ、セキュリティが高い場合に特に有用であることがわかる.この機能は従来のASPプログラムではStreamオブジェクトで実現できる.読者のテストを容易にするために、ここではすべてのソースコードをリストし、ソースコードに紹介と注釈を行います.
まず、GetBinaryFileを作成します.asmxファイル:
VS.NETでC#のaspxWebCSプロジェクトを新規作成し、「新しいアイテムを追加」して「Webサービス」を選択し、ファイル名を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
{
///
///GetBinaryFile 。
///WebServices :GetBinaryFile
/// : 。
///

[WebService(Namespace="http://xml.sz.luohuedu.net/",
Description=" WebServices .NET 。")]
publicclassGetBinaryFile:System.Web.Services.WebService
{
#regionComponentDesignergeneratedcode
//Web
privateIContainercomponents=null;
///
/// 。
///

protectedoverridevoidDispose(booldisposing)
{
if(disposing&&components!=null)
{
components.Dispose();
}
base.Dispose(disposing);
}
#endregion
publicclassImages:System.Web.Services.WebService
{
///
///Web , 。
///

[WebMethod(Description="Web , ")]
publicbyte[]GetImage(stringrequestFileName)
{
///
/// ,
if(requestFileName==null||requestFileName=="")
returngetBinaryFile("D:\\Picture.JPG");
else
returngetBinaryFile("D:\\"+requestFileName);
}
///
///getBinaryFile: 。
///

///
///
publicbyte[]getBinaryFile(stringfilename)
{
if(File.Exists(filename))
{
try
{
/// 。
FileStreams=File.OpenRead(filename);
returnConvertStreamToByteBuffer(s);
}
catch(Exceptione)
{
returnnewbyte[0];
}
}
else
{
returnnewbyte[0];
}
}
///
///ConvertStreamToByteBuffer: 。
///

///
///
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 , 。")]
publicstringGetImageType()
{
/// ,
return"image/jpg";
}
}
}
}

1 2次ページ全文を読む