有时候我们通常需要把上传的图片或其他文件放在其他服务器上,以便和网站服务器分开,这时候ASP.NET的WebService就派上大用场 了。我们可以在文件服务器上运行一个WebService,提供上传和下载文件的方法,然后在网站服务器上的网站中引用这个WebService,调用上 传或下载的方法,实现对远程服务器上的文件上传和下载的功能。以下操作在VS2005环境中完成。
      先新建一个 WebService项目UpDownFile,里面自动建了一个叫Service1的asmx和cs文件,看不顺眼这个名字的就把它重命名吧,我就把它 重命名为了UpDownFile.asmx,把里面的class也重命名为UpDownFile了,这样看起来顺眼多了

UpDownFile.asmx.cs的代码如下:

usingSystem;

usingSystem.Data;

usingSystem.Web;

usingSystem.Collections;

usingSystem.Web.Services;

usingSystem.Web.Services.Protocols;

usingSystem.ComponentModel;

usingSystem.IO;

namespaceUpDownFile

{

    

/// <summary>

    

/// UpDownFile 的摘要说明

    

/// </summary>

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

    [WebServiceBinding(ConformsTo 

= WsiProfiles.BasicProfile1_1)]

    [ToolboxItem(

false)]

    

public class UpDownFile : System.Web.Services.WebService

    

{

        

//将Stream流转换为byte数组的方法。

        

//PS:原本想把这个方法也当做WebMethod的,因为客户端在上传文件时也要调用该方法,后来发现Stream类型的不能通过WebService传输。。。:(

public byte[] ConvertStreamToByteBuffer(Stream s)

        

{

            MemoryStream ms 

= new MemoryStream();

            

int b;

            

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

            

{

                ms.WriteByte((

byte)b);

            }
            

return ms.ToArray();

        }
        

//上传文件至WebService所在服务器的方法,这里为了操作方法,文件都保存在UpDownFile服务所在文件夹下的File目录中

[WebMethod]

        

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

        

{

            

try

            

{

                FileStream fs 

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

                fs.Write(data, 

0, data.Length);

                fs.Close();
                

return true;

            }
            

catch

            

{

                

return false;

            }
        }
        

//下载WebService所在服务器上的文件的方法

[WebMethod]

        

public byte[] Down(string filename)

        

{

            

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

            

if (File.Exists(filepath))

            

{

                

try

                

{

                    FileStream s 

= File.OpenRead(filepath);

                    

return ConvertStreamToByteBuffer(s);

                }
                

catch

                

{

                    

return new byte[0];

                }
            }
            

else

            

{

                

return new byte[0];

            }
        }
    }
}

接下来就是在客户端网站中调用了,先添加Web引用,干脆引用名也用UpDownFile算了

,首先是DownFile.aspx

usingSystem;

usingSystem.Data;

usingSystem.Configuration;

usingSystem.Collections;

usingSystem.Web;

usingSystem.Web.Security;

usingSystem.Web.UI;

usingSystem.Web.UI.WebControls;

usingSystem.Web.UI.WebControls.WebParts;

usingSystem.Web.UI.HtmlControls;

usingSystem.IO;

namespaceHelloWorld

{

    

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

    

{

        

protected void Page_Load(object sender, EventArgs e)

        

{

            UpDownFile.UpDownFile down 

= new UpDownFile.UpDownFile();

            

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

            Response.BinaryWrite(file);
        }
    }
}

接下来是上传的演示文件UpFile.aspx

usingSystem;

usingSystem.Data;

usingSystem.Configuration;

usingSystem.Collections;

usingSystem.Web;

usingSystem.Web.Security;

usingSystem.Web.UI;

usingSystem.Web.UI.WebControls;

usingSystem.Web.UI.WebControls.WebParts;

usingSystem.Web.UI.HtmlControls;

usingSystem.IO;

namespaceHelloWorld

{

    

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

    

{

        

protected void Page_Load(object sender, EventArgs e)

        

{

            
        }
        

protected void Button1_Click(object sender, EventArgs e)

        

{

            

//保存到远程File文件夹

            

//FileUpload1是aspx页面的一个FileUpload控件

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

            up.Up(ConvertStreamToByteBuffer(FileUpload1.PostedFile.InputStream), FileUpload1.PostedFile.FileName.Substring(FileUpload1.PostedFile.FileName.LastIndexOf(

"\\") + 1));

        }
        

protected byte[] ConvertStreamToByteBuffer(Stream s)

        

{

            MemoryStream ms 

= new MemoryStream();

            

int b;

            

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

            

{

                ms.WriteByte((

byte)b);

            }
            

return ms.ToArray();

        }
    }
}

其实主要是UpDownFile.asmx.cs这个Web服务文件,客户端怎么调用就随便了。大家看到了,Up和Down方法中传输的都是byte[]数组,因为WebService不支持Stream传输,那就把文件转换为二进制数组来传递。
      此 外也可以制作利用WebService远程存储数据库的东西,因为有时候远程服务器的1433端口不能开放,只能开放80,那WebService就派上 用场了。要注意的是,DataTable不能通过WebService传输,只能附在DataSet上来传输,此外很多类型也不可以通过 WebService传,具体可以通过其传输的类型请参考书籍

。我想远程上下传文件和远程存取数据库是WebService最主要的应用吧?

利用WebService实现远程服务器文件的上传和下载相关推荐

  1. 利用 WebService实现远程服务器文件的上传和下载

    有时候我们通常需要把上传的图片或其他文件放在其他服务器上,以便和网站服务器分开,这时候ASP.NET的WebService就派上大用场了.我们可以在文件服务器上运行一个WebService,提供上传和 ...

  2. dw本地文件传不到远程服务器,用DW上传站点 怎么设置远程服务器

    用DW上传站点 怎么设置远程服务器 内容精选 换一换 本节操作介绍如何在Windows操作系统的本地主机上使用FTP上传文件到云服务器.已在待上传文件的云服务器中搭建 FTP 服务.如果您的云服务器为 ...

  3. 如何搭建FTP服务器实现文件的上传及下载?(亲测有效)

      FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务. FTP是File Transfer Protoc ...

  4. Hadoop环境下用java代码实现hdfs远程文件的上传和下载

    Hadoop环境下用java代码实现hdfs远程文件的上传和下载 文章目录 Hadoop环境下用java代码实现hdfs远程文件的上传和下载 一.新建maven工程 二.文件的上传 三.文件的下载 四 ...

  5. ASP.NET实现文件的上传和下载

    最近做的一个高校网站中涉及到了上传和下载文件的需求(具体需求为:网站公布的通知,在后台要能给每个通知添加附件,在前台要能显示并下载附件),之前只是学习过关于上传的 理论知识,这里实践了一下下,与大家分 ...

  6. Windows FTP 服务器实现只能上传不能下载或删除

    Windows FTP 服务器实现只能上传不能下载或删除 需求:在 Windows 系统上搭建一个 FTP 服务器,用于收发作业. 其中单独支持下载文件,或是上传文件的需求,比较容易实现.但是有一种需 ...

  7. java图片上传下载_java实现文件的上传和下载

    1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...

  8. SpringMVC实现文件的上传和下载

    SpringMVC实现文件的上传和下载http://www.bieryun.com/1120.html 前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:"用什么技术来实现一般网页上文件的 ...

  9. Akka实战:HTTP大文件断点上传、下载,秒传

    2019独角兽企业重金招聘Python工程师标准>>> 访问:https://github.com/yangbajing/scala-applications/tree/master ...

最新文章

  1. Centos-6 编译安装实现LAMP,wordpress最新版
  2. 面向程序员的数据库访问性能优化法则
  3. JAVA——一次性读取或者写入文本文件所有内容
  4. Chrome新的语言API,让您的浏览器说话
  5. CSDN-markdown编辑器语法速查手册
  6. srsLTE源码学习:生成多播信道表gen_mch_tables
  7. Compose 1.0 即将发布,你准备好了吗?
  8. Java 线程池的复用原理
  9. android 图库 imgcache.idx,iOS开发 - 关于列表图片渲染内存暴增问题
  10. TIDB介绍 新数据库趋势
  11. 【李宏毅2020 ML/DL】P53-55 Conditional Generation by RNN Attention Pointer Network Recursive
  12. php array函数 array_search 搜索键值, 返回键名
  13. Silverlight 2 中简单的2.5D控件
  14. python制作自动交易软件排名_A股股票自动化交易软件的使用和简易说明书,根据多年经验使用python开发...
  15. mysql索引失效情况
  16. 【转】找工时间线和心得
  17. Excel学习系列(1)--以文本存储的数字转换为数字
  18. 赞奇科技英特尔共图视觉计算“云”上大作为
  19. 如何让搜索引擎搜索到自己的个人博客网站(如何提交网站到各搜索引擎,如百度、必应Bing,以及提交页面URL的地址)
  20. 集团企业用户收不到彩信手机报是怎么回事?

热门文章

  1. QT的QQmlContext类的使用
  2. QML基础类型之list
  3. c++容器共性机制研究
  4. 4.K-MEANS聚类算法
  5. B05_NumPy从数值范围创建数组(numpy.arange,numpy.linspace,numpy.logspace)
  6. SSh结合Easyui实现Datagrid的分页显示
  7. 打开高效文本编辑之门_调用Linux的sed命令
  8. php是范例,php基础范例
  9. C语言之获取类型存储空间
  10. [目标检测] Faster R-CNN 深入理解 改进方法汇总