天天看點

利用WebService實作遠端伺服器檔案的上傳和下載下傳

有時候我們通常需要把上傳的圖檔或其他檔案放在其他伺服器上,以便和網站伺服器分開,這時候ASP.NET的WebService就派上大用場 了。我們可以在檔案伺服器上運作一個WebService,提供上傳和下載下傳檔案的方法,然後在網站伺服器上的網站中引用這個WebService,調用上 傳或下載下傳的方法,實作對遠端伺服器上的檔案上傳和下載下傳的功能。以下操作在VS2005環境中完成。

      先建立一個 WebService項目UpDownFile,裡面自動建了一個叫Service1的asmx和cs檔案,看不順眼這個名字的就把它重命名吧,我就把它 重命名為了UpDownFile.asmx,把裡面的class也重命名為UpDownFile了,這樣看起來順眼多了

利用WebService實作遠端伺服器檔案的上傳和下載下傳

UpDownFile.asmx.cs的代碼如下:

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

using System;

利用WebService實作遠端伺服器檔案的上傳和下載下傳

using System.Data;

利用WebService實作遠端伺服器檔案的上傳和下載下傳

using System.Web;

利用WebService實作遠端伺服器檔案的上傳和下載下傳

using System.Collections;

利用WebService實作遠端伺服器檔案的上傳和下載下傳

using System.Web.Services;

利用WebService實作遠端伺服器檔案的上傳和下載下傳

using System.Web.Services.Protocols;

利用WebService實作遠端伺服器檔案的上傳和下載下傳

using System.ComponentModel;

利用WebService實作遠端伺服器檔案的上傳和下載下傳

using System.IO;

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

namespace UpDownFile

利用WebService實作遠端伺服器檔案的上傳和下載下傳

{

利用WebService實作遠端伺服器檔案的上傳和下載下傳

    /// <summary>

利用WebService實作遠端伺服器檔案的上傳和下載下傳

    /// UpDownFile 的摘要說明

利用WebService實作遠端伺服器檔案的上傳和下載下傳

    /// </summary>

利用WebService實作遠端伺服器檔案的上傳和下載下傳

    [WebService(Namespace = "http://tempuri.org/")]

利用WebService實作遠端伺服器檔案的上傳和下載下傳

    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

利用WebService實作遠端伺服器檔案的上傳和下載下傳

    [ToolboxItem(false)]

利用WebService實作遠端伺服器檔案的上傳和下載下傳

    public class UpDownFile : System.Web.Services.WebService

利用WebService實作遠端伺服器檔案的上傳和下載下傳

    {

利用WebService實作遠端伺服器檔案的上傳和下載下傳

        //将Stream流轉換為byte數組的方法。

利用WebService實作遠端伺服器檔案的上傳和下載下傳

        //PS:原本想把這個方法也當做WebMethod的,因為用戶端在上傳檔案時也要調用該方法,後來發現Stream類型的不能通過WebService傳輸。。。:(

利用WebService實作遠端伺服器檔案的上傳和下載下傳

        public byte[] ConvertStreamToByteBuffer(Stream s)

利用WebService實作遠端伺服器檔案的上傳和下載下傳

        {

利用WebService實作遠端伺服器檔案的上傳和下載下傳

            MemoryStream ms = new MemoryStream();

利用WebService實作遠端伺服器檔案的上傳和下載下傳

            int b;

利用WebService實作遠端伺服器檔案的上傳和下載下傳

            while ((b = s.ReadByte()) != -1)

利用WebService實作遠端伺服器檔案的上傳和下載下傳

            {

利用WebService實作遠端伺服器檔案的上傳和下載下傳

                ms.WriteByte((byte)b);

利用WebService實作遠端伺服器檔案的上傳和下載下傳

            }

利用WebService實作遠端伺服器檔案的上傳和下載下傳

            return ms.ToArray();

利用WebService實作遠端伺服器檔案的上傳和下載下傳

        }

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

        //上傳檔案至WebService所在伺服器的方法,這裡為了操作方法,檔案都儲存在UpDownFile服務所在檔案夾下的File目錄中

利用WebService實作遠端伺服器檔案的上傳和下載下傳

        [WebMethod]

利用WebService實作遠端伺服器檔案的上傳和下載下傳

        public bool Up(byte[] data, string filename)

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

            try

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

                FileStream fs = File.Create(Server.MapPath("File/") + filename);

利用WebService實作遠端伺服器檔案的上傳和下載下傳

                fs.Write(data, 0, data.Length);

利用WebService實作遠端伺服器檔案的上傳和下載下傳

                fs.Close();

利用WebService實作遠端伺服器檔案的上傳和下載下傳

                return true;

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

            catch

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

                return false;

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

        //下載下傳WebService所在伺服器上的檔案的方法

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

        public byte[] Down(string filename)

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

            string filepath = Server.MapPath("File/") + filename;

利用WebService實作遠端伺服器檔案的上傳和下載下傳

            if (File.Exists(filepath))

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

                try

利用WebService實作遠端伺服器檔案的上傳和下載下傳

                {

利用WebService實作遠端伺服器檔案的上傳和下載下傳

                    FileStream s = File.OpenRead(filepath);

利用WebService實作遠端伺服器檔案的上傳和下載下傳

                    return ConvertStreamToByteBuffer(s);

利用WebService實作遠端伺服器檔案的上傳和下載下傳

                }

利用WebService實作遠端伺服器檔案的上傳和下載下傳

                catch

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

                    return new byte[0];

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

            else

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

                return new byte[0];

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

    }

利用WebService實作遠端伺服器檔案的上傳和下載下傳

}

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

接下來就是在用戶端網站中調用了,先添加Web引用,幹脆引用名也用UpDownFile算了

利用WebService實作遠端伺服器檔案的上傳和下載下傳

,首先是DownFile.aspx

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

using System.Configuration;

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

using System.Web.Security;

利用WebService實作遠端伺服器檔案的上傳和下載下傳

using System.Web.UI;

利用WebService實作遠端伺服器檔案的上傳和下載下傳

using System.Web.UI.WebControls;

利用WebService實作遠端伺服器檔案的上傳和下載下傳

using System.Web.UI.WebControls.WebParts;

利用WebService實作遠端伺服器檔案的上傳和下載下傳

using System.Web.UI.HtmlControls;

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

namespace HelloWorld

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

    public partial class DownFile : System.Web.UI.Page

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

        protected void Page_Load(object sender, EventArgs e)

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

            UpDownFile.UpDownFile down = new UpDownFile.UpDownFile();

利用WebService實作遠端伺服器檔案的上傳和下載下傳

            byte[] file = down.Down(Request.QueryString["filename"].ToString());

利用WebService實作遠端伺服器檔案的上傳和下載下傳

            Response.BinaryWrite(file);

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

接下來是上傳的示範檔案UpFile.aspx

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

    public partial class UpFile : System.Web.UI.Page

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

        protected void Button1_Click(object sender, EventArgs e)

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

            //儲存到遠端File檔案夾

利用WebService實作遠端伺服器檔案的上傳和下載下傳

            //FileUpload1是aspx頁面的一個FileUpload控件

利用WebService實作遠端伺服器檔案的上傳和下載下傳

            UpDownFile.UpDownFile up = new UpDownFile.UpDownFile();

利用WebService實作遠端伺服器檔案的上傳和下載下傳

            up.Up(ConvertStreamToByteBuffer(FileUpload1.PostedFile.InputStream), FileUpload1.PostedFile.FileName.Substring(FileUpload1.PostedFile.FileName.LastIndexOf("\\") + 1));

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

        protected byte[] ConvertStreamToByteBuffer(Stream s)

利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳
利用WebService實作遠端伺服器檔案的上傳和下載下傳

其實主要是UpDownFile.asmx.cs這個Web服務檔案,用戶端怎麼調用就随便了。大家看到了,Up和Down方法中傳輸的都是byte[]數組,因為WebService不支援Stream傳輸,那就把檔案轉換為二進制數組來傳遞。

      此 外也可以制作利用WebService遠端存儲資料庫的東西,因為有時候遠端伺服器的1433端口不能開放,隻能開放80,那WebService就派上 用場了。要注意的是,DataTable不能通過WebService傳輸,隻能附在DataSet上來傳輸,此外很多類型也不可以通過 WebService傳,具體可以通過其傳輸的類型請參考書籍

利用WebService實作遠端伺服器檔案的上傳和下載下傳

。我想遠端上下傳檔案和遠端存取資料庫是WebService最主要的應用吧?

本文轉自左正部落格園部落格,原文連結:http://www.cnblogs.com/soundcode/archive/2013/04/26/3045090.html,如需轉載請自行聯系原作者

繼續閱讀