asp.net Web Services上传和下载文件(完整代码)第1/2页

下面,我们就分别介绍如何通过Web Services从服务器下载文件到客户端和从客户端通过Web Services上载文件到服务器。
一:通过Web Services显示和下载文件
我们这里建立的Web Services的名称为GetBinaryFile,提供两个公共方法:分别是GetImage()和GetImageType(),前者返回二进制文件字节数组,后者返回文件类型,其中,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
{
///<summary>
///GetBinaryFile的摘要说明。
///WebServices名称:GetBinaryFile
///功能:返回服务器上的一个文件对象的二进制字节数组。
///</summary>
[WebService(Namespace="http://xml.sz.luohuedu.net/",
Description="在WebServices里利用.NET框架进行传递二进制文件。")]
publicclassGetBinaryFile:System.Web.Services.WebService
{
#regionComponentDesignergeneratedcode
//Web服务设计器所必需的
privateIContainercomponents=null;
///<summary>
///清理所有正在使用的资源。
///</summary>
protectedoverridevoidDispose(booldisposing)
{
if(disposing&&components!=null)
{
components.Dispose();
}
base.Dispose(disposing);
}
#endregion
publicclassImages:System.Web.Services.WebService
{
///<summary>
///Web服务提供的方法,返回给定文件的字节数组。
///</summary>
[WebMethod(Description="Web服务提供的方法,返回给定文件的字节数组")]
publicbyte[]GetImage(stringrequestFileName)
{
///得到服务器端的一个图片
///如果你自己测试,注意修改下面的实际物理路径
if(requestFileName==null||requestFileName=="")
returngetBinaryFile("D:\\Picture.JPG");
else
returngetBinaryFile("D:\\"+requestFileName);
}
///<summary>
///getBinaryFile:返回所给文件路径的字节数组。
///</summary>
///<paramname="filename"></param>
///<returns></returns>
publicbyte[]getBinaryFile(stringfilename)
{
if(File.Exists(filename))
{
try
{
///打开现有文件以进行读取。
FileStreams=File.OpenRead(filename);
returnConvertStreamToByteBuffer(s);
}
catch(Exceptione)
{
returnnewbyte[0];
}
}
else
{
returnnewbyte[0];
}
}
///<summary>
///ConvertStreamToByteBuffer:把给定的文件流转换为二进制字节数组。
///</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服务提供的方法,返回给定文件类型。")]
publicstringGetImageType()
{
///这里只是测试,您可以根据实际的文件类型进行动态输出
return"image/jpg";
}
}
}
}

当前1/2页 12下一页阅读全文

(0)

相关推荐

  • asp.net 下载文件时输出文件内容

    复制代码 代码如下: <script language="C#" runat="server"> protected void Page_Load(object sender, System.EventArgs e) { Response.ContentType = "application/x-shockwave-flash"; string fileFlash = Server.MapPath("/") + &

  • ASP.NET实现从服务器下载文件问题处理

    假设在服务器的根目录下有个名为Download的文件夹,这个文件夹存放一些提供给引用程序下载的文件 public void DownloadFile(string path, string name){ try{ System.IO.FileInfo file = new System.IO.FileInfo(path); Response.Clear(); Response.Charset = "GB2312"; Response.ContentEncoding = System.T

  • asp.net BackgroundWorker之在后台下载文件

    示例: 下面的代码示例演示如何使用 BackgroundWorker 组件从 URL 加载 XML 文件.用户单击"下载"按钮时,Click 事件处理程序将调用 BackgroundWorker 组件的 RunWorkerAsync 方法来启动下载操作.在下载过程中,将禁用该按钮,然后在下载完成后再启用该按钮.MessageBox 将显示文件的内容. 复制代码 代码如下: using System; using System.Collections.Generic; using Sys

  • ASP.NET批量下载文件的方法

    本文实例讲述了ASP.NET批量下载文件的方法.分享给大家供大家参考.具体方法如下: 一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到客户端.最后删除临时文件夹.   二.代码实现   1.ASP.NET批量下载 核心代码 复制代码 代码如下: //遍历服务器指定文件夹下的所有文件 string path = "uploads/Image/&qu

  • asp.net 下载文件时根据MIME类型自动判断保存文件的扩展名

    引言 用WebClient下载远程资源时,经常会遇到类似这样的网址: http://www.uushare.com/filedownload?user=icesee&id=2205188 http://www.guaishow.com/u/luanfujie/g9675/ 我们不知道这个Url具体代表的是一个网页,还是某种类型的文件. 而有些Url虽然带有扩展名,但可能是错误的扩展名,常见的比如把gif文件标上了jpg扩展名. 如果我们没法正确判断下载源的文件类型的话,就无法保存为正确的文件格式

  • asp.net C#实现下载文件的六种方法实例

    复制代码 代码如下: protected void Button1_Click(object sender, EventArgs e)  {  /*  微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite  下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题.  代码如下:  */ Response.ContentType = "application/x-zip-compressed"

  • ASP.NET中下载文件的几种实例代码

    复制代码 代码如下: //TransmitFile实现下载     protected void Button1_Click(object sender, EventArgs e)    {        /*         微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite         下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题.         代码如下:         */

  • 在ASP.NET中下载文件的实现代码

    这是笔者常被问到的一个问题,如何通过ASP.NET来下载文件,这个问题可大可小,我们先从小的开始.当我们要让用户下载一个文件,最简单的方式是通过Response.Redirect指令: Response.Redirect("test.doc") 您可以把上面这行指令放在Button的Click事件当中,当用户点击按钮之后,网页就会被转址到该word档,造成下载的效果. 但是这样的下载有几个问题: 1. 无法下载不存在的文件:例如,我们若是想把程序动态(临时)产生的文字,当作一个文件下载

  • ASP.NET(C#) Web Api通过文件流下载文件的实例

    下载文件到本地是很多项目开发中需要实现的一个很简单的功能.说简单,是从具体的代码实现上来说的,.NET的文件下载方式有很多种,本示例给大家介绍的是ASP.NET Web Api方式返回HttpResponseMessage下载文件到本地.实现的方法很简单,其中就是读取服务器的指定路径文件流,将其做为返回的HttpResponseMessage的Content.直接贴出DownloadController控件器的代码: using System; using System.Collections.

  • ASP.NET Web Api 2实现多文件打包并下载文件的实例

    最近由于工作和个人事务,站点也好久没更新了,但这并不影响我对.NET的热情.站点的更新工作还是得想办法抽时间来完成的. 今天利用中午的时间来写一篇关于Asp.Net Web Api下载文件的文章,之前我也写过类似的文章,请见:<ASP.NET(C#) Web Api通过文件流下载文件的实例> 本文以这篇文章的基础,提供了ByteArrayContent的下载以及在下载多个文件时实现在服务器对多文件进行压缩打包后下载的功能. 关于本文中实现的在服务器端用.NET压缩打包文件功能的过程中,使用到了

  • ASP.NET 在下载文件时对其重命名的思路及实现方法

    有些时候为了保证文件再上传时不会覆盖掉之前上传的文件,同时由于上传的目标目录里的文件可能很多,这个时候一个一个查是不太好的事情,所以这里可以自动生成GUID使文件名重命名成GUID_原来的名称.扩展名.但是在下载的时候最好可能保证恢复到原来的名称.这个时候听伤神的.搜了一下相关资料后得知可使用response来解决.具体代码如下. [csharp]  复制代码 代码如下: <pre name="code" class="csharp">string pa

随机推荐