知识大全 如何通过Web Services上传和下载文件

Posted 文件

篇首语:生气是拿别人做错的事来惩罚自己。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 如何通过Web Services上传和下载文件相关的知识,希望对你有一定的参考价值。

如何通过Web Services上传和下载文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  随着Internet技术的发展和跨平台需求的日益增加 Web Services的应用越来越广 我们不但需要通过Web Services传递字符串信息 而且需要传递二进制文件信息 下面 我们就分别介绍如何通过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

  using System;

  using System Collections;

  using System ComponentModel;

  using System Data;

  using System Diagnostics;

  using System Web;

  using System Web UI;

  using System Web Services;

  using System IO;

  namespace aspxWebCS

  

  ///

  /// GetBinaryFile 的摘要说明

  /// Web Services名称 GetBinaryFile

  /// 功能 返回服务器上的一个文件对象的二进制字节数组

  ///

  [WebService(Namespace=

  Description= 在Web Services里利用 NET框架进行传递二进制文件 )]

  public class GetBinaryFile : System Web Services WebService

  

  #region Component Designer generated code

  //Web 服务设计器所必需的

  private IContainer ponents = null;

  ///

  /// 清理所有正在使用的资源

  ///

  protected override void Dispose( bool disposing )

  

  if(disposing &&ponents != null)

  

  ponents Dispose();

  

  base Dispose(disposing);

  

  #endregion

  public class Images: System Web Services WebService

  

  ///

  /// Web 服务提供的方法 返回给定文件的字节数组

  ///

  [WebMethod(Description= Web 服务提供的方法 返回给定文件的字节数组 )]

  public byte[] GetImage(string requestFileName)

  

  ///得到服务器端的一个图片

  ///如果你自己测试 注意修改下面的实际物理路径

  if(requestFileName == null || requestFileName == )

  return getBinaryFile( D:\\Picture JPG );

  else

  return getBinaryFile( D:\\ + requestFileName);

  

  ///

  

  /// getBinaryFile 返回所给文件路径的字节数组

  ///

  ///

  public byte[] getBinaryFile(string filename)

  

  if(File Exists(filename))

  

  try

  

  ///打开现有文件以进行读取

  FileStream s = File OpenRead(filename);

  return ConvertStreamToByteBuffer(s);

  

  catch(Exception e)

  

  return new byte[ ];

  

  

  else

  

  return new byte[ ];

  

  

  ///

  /// ConvertStreamToByteBuffer 把给定的文件流转换为二进制字节数组

  ///

  ///

  public byte[] ConvertStreamToByteBuffer(System IO Stream theStream)

  

  int b ;

  System IO MemoryStream tempStream = new System IO MemoryStream();

  while((b =theStream ReadByte())!= )

  

  tempStream WriteByte(((byte)b ));

  

  return tempStream ToArray();

  

  [WebMethod(Description= Web 服务提供的方法 返回给定文件类型 )]

  public string GetImageType()

  

  ///这里只是测试 您可以根据实际的文件类型进行动态输出

  return image/jpg ;

  

  

  

  

  观看地址 进入讨论组讨论

  

  一旦我们创建了上面的asmx文件 进行编译后 我们就可以编写客户端的代码来进行调用这个Web Services了

  我们先 添加Web引用 输入 下面 我们编写显示文件的中间文件 GetBinaryFileShow aspx 这里 我们只需要在后代码里编写代码即可 GetBinaryFileShow aspx cs文件内容如下

  using System;

  using System Collections;

  using System ComponentModel;

  using System Data;

  using System Drawing;

  using System Web;

  using System Web SessionState;

  using System Web UI;

  using System Web UI WebControls;

  using System Web UI HtmlControls;

  using System Web Services;

  namespace aspxWebCS

  

  ///

  /// GetBinaryFileShow 的摘要说明

  

  ///

  public class GetBinaryFileShow : System Web UI Page

  

  private void Page_Load(object sender System EventArgs e)

  

  // 在此处放置用户代码以初始化页面

  ///定义并初始化文件对象

   aspxWebCS GetBinaryFile Images oImage;

  oImage = new aspxWebCS GetBinaryFile Images();

  ///得到二进制文件字节数组

  byte[] image = oImage GetImage( );

  ///转换为支持存储区为内存的流

  System IO MemoryStream memStream = new System IO MemoryStream(image);

  ///定义并实例化Bitmap对象

  Bitmap bm = new Bitmap(memStream);

  ///根据不同的条件进行输出或者下载

  Response Clear();

  ///如果请求字符串指定下载 就下载该文件

  ///否则 就显示在浏览器中

  if(Request QueryString[ Download ]== )

  

  Response Buffer = true;

  Response ContentType = application/octet stream ;

  ///这里下载输出的文件名字 ok jpg 为例子 你实际中可以根据情况动态决定

  Response AddHeader( Content Disposition attachment;filename=ok jpg );

  

  else

  Response ContentType = oImage GetImageType();

  Response BinaryWrite(image);

  Response End();

  

  #region Web Form Designer generated code

  override protected void OnInit(EventArgs e)

  

  //

  // CODEGEN 该调用是 ASP NEeb 窗体设计器所必需的

  //

  InitializeComponent();

  base OnInit(e);

  

  ///

  /// 设计器支持所需的方法 不要使用代码编辑器修改

  /// 此方法的内容

  ///

  private void InitializeComponent()

  

  this Load += new System EventHandler(this Page_Load);

  

  #endregion

  

  

  最后 我们就编写最终的浏览页面 GetBinaryFile aspx 这个文件很简单 只需要aspx文件即可 内容如下

  <%@ Page language="c#" Codebehind="GetBinaryFile.aspx.cs" AutoEventWireup="false"

  Inherits="aspxWebCS.GetBinaryFile" %>  Inherits= aspxWebCS GetBinaryFile %>

  

  

  

  

  

  

  

  

  

  

  

  

  

  runat= server >  runat= server >下载文件

  

  

  

  

  

  收藏地址:进入讨论组讨论

  

  using System;

  using System Collections;

  using System ComponentModel;

  using System Data;

  using System Diagnostics;

  using System Web;

  using System Web Services;

  using System IO;

  namespace aspxWebCS

  

  ///

  /// Upload 的摘要说明

  ///

  [WebService(Namespace=

  Description= 在Web Services里利用 NET框架进上载文件 )]

  public class Upload : System Web Services WebService

  

  public Upload()

  

  //CODEGEN 该调用是 ASP NEeb 服务设计器所必需的

  InitializeComponent();

  

  #region Component Designer generated code

  //Web 服务设计器所必需的

  private IContainer ponents = null;

  ///

  /// 设计器支持所需的方法 不要使用代码编辑器修改

  /// 此方法的内容

  ///

  private void InitializeComponent()

  

  

  ///

  /// 清理所有正在使用的资源

  ///

  protected override void Dispose( bool disposing )

  

  if(disposing &&ponents != null)

  

  ponents Dispose();

  

  base Dispose(disposing);

  

  #endregion

  [WebMethod(Description= Web 服务提供的方法 返回是否文件上载成功与否 )]

  public string UploadFile(byte[] fs string FileName)

  

  try

  

  ///定义并实例化一个内存流 以存放提交上来的字节数组

  MemoryStream m = new MemoryStream(fs);

  ///定义实际文件对象 保存上载的文件

  FileStream f = new FileStream(Server MapPath( ) + \\

  + FileName FileMode Create);

  ///把内内存里的数据写入物理文件

  m WriteTo(f);

  m Close();

  f Close();

  f = null;

  m = null;

  return 文件已经上传成功 ;

  

  catch(Exception ex)

  

  return ex Message;

  

  

  

  

  

  using System;

  using System Collections;

  using System ComponentModel;

  using System Data;

  using System Drawing;

  using System Web;

  using System Web SessionState;

  using System Web UI;

  using System Web UI WebControls;

  using System Web UI HtmlControls;

  using System Web Services;

  using System IO;

  namespace aspxWebCS

  

  ///

  /// Upload 的摘要说明

  /// 利用该方法通过Web Services上载文件

  ///

  public class Upload : System Web UI Page

  

  protected System Web UI HtmlControls HtmlInputFile MyFile;

  protected System Web UI WebControls Button Button ;

  private void Page_Load(object sender System EventArgs e)

  

  // 在此处放置用户代码以初始化页面

  

  #region Web Form Designer generated code

  override protected void OnInit(EventArgs e)

  

  //

  // CODEGEN 该调用是 ASP NEeb 窗体设计器所必需的

  //

  InitializeComponent();

  base OnInit(e);

  

  ///

  /// 设计器支持所需的方法 不要使用代码编辑器修改

  /// 此方法的内容

  ///

  private void InitializeComponent()

  

  this Button Click += new System EventHandler(this Button _Click);

  this Load += new System EventHandler(this Page_Load);

  

  #endregion

  private void Button _Click(object sender System EventArgs e)

  

  ///首先得到上载文件信息和文件流

  if(MyFile PostedFile != null)

  

  System Web HttpFileCollection oFiles;

  oFiles = System Web HttpContext Current Request Files;

  if(oFiles Count < )

  

  Response Write ( 请选择文件 );

  Response End();

  

  string FilePath = oFiles[ ] FileName;

  if(FilePath == || FilePath == null)

  

  Response Write ( 请选择一个文件 );

  Response End();

  

  

  string FileName = FilePath Substring(FilePath LastIndexOf( \\ )+ );

  try

  

  ///处理上载的文件流信息

  byte[] b = new byte[oFiles[ ] ContentLength];

  System IO Stream fs;

   aspxWebCS Upload o;

  o = new aspxWebCS Upload();

  fs = (System IO Stream)oFiles[ ] InputStream;

  fs Read(b oFiles[ ] ContentLength);

  ///调用Web Services的UploadFile方法进行上载文件

  Response Write(o UploadFile(b FileName));

  fs Close();

  

  catch(Exception ex)

  

  Response Write(ex Message);

  

  

  else

  

  Response Write( 请选择文件 );

  

  

  

  

  

  最后 需要注意的是 在保存文件时 您应该确保指定文件的完整路径(例如 C:MyFilesPicture jpg ) 并确保为 ASP NET使用的帐户提供要存储文件的目录的写权限 上载大文件时 可使用 元素的 maxRequestLength 属性来增加文件大小的最大允许值   其中 maxRequestLength 指示 ASP NET 支持的HTTP方式上载的最大字节数 该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击 指定的大小以 KB 为单位 默认值为 KB ( MB) executionTimeout 指示在被 ASP NET 自动关闭前 允许执行请求的最大秒数 在当文件超出指定的大小时 如果浏览器中会产生 DNS错误或者出现服务不可得到的情况 也请修改以上的配置 把配置数加大

  另外 上载大文件时 还可能会收到以下错误信息

  aspnet_wp exe (PID: ) 被回收 因为内存消耗超过了 MB(可用 RAM 的百分之 )

  如果遇到此错误信息 请增加应用程序的 nfig 文件的 元素中 memoryLimit 属性的值

cha138/Article/program/net/201311/12410

相关参考

知识大全 Java做的比较完善的FTP连接上传下载文件

Java做的比较完善的FTP连接上传下载文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这是

知识大全 百度文库中如果上传了免费的文件,一旦被别的网友下载后,系统给奖励多少财富值

百度文库中如果上传了免费的文件,一旦被别的网友下载后,系统给奖励多少财富值?谢谢!1分百度文库免费文件被下载,能奖励多少财富值x<=200,系统给每次1分200<x<500,不给分5

知识大全 使用 XML Web services 进行 Web 编程

使用XMLWebservices进行Web编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  X

知识大全 用Web Services来整合.NET和J2EE

用WebServices来整合.NET和J2EE  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 vs.net中web services入门

  Visual中的XMLWebservices入门  目录  简介用托管代码编写的XMLWebservices使用VisualStudio创建XMLWebservices使用VisualStudio

知识大全 SOA and Web services 新手入门

SOAandWebservices新手入门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  内容管

知识大全 JAVA处理含有DataSet的web services

JAVA处理含有DataSet的webservices  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 调用.NET XML Web Services返回数据集合二

调用.NETXMLWebServices返回数据集合二  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 使用VB或VC#访问XML Web services

使用VB或VC#访问XMLWebservices  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 SOA and Web services 新手入门i学习

SOAandWebservices新手入门i学习  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!