`
ljl_xyf
  • 浏览: 635981 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C#如何用WebClient动态提交文件至Web服务器和设定Http响应超时时间

阅读更多

WebClient方法本身没有提供设定http请求响应超时时间的方法,我们需要重写该该类的GetWebRequest 方法,代码如下。

类名为 CGMWebClient.cs 可以根据自己的要求修改

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;

public partial class CsvDataUpload : System.Web.UI.Page
{


    protected void Page_Load(object sender, EventArgs e)
    {
        string strResponse = "";
        try
        {
            strResponse = UpFileData();
        }
        catch (Exception ex)
        {

            strResponse = ex.ToString();
        }


        Response.Write(strResponse);
        // Response.Write(UPdataData());
    }


    /// <summary>
    /// 文件上传处理
    /// </summary>
    /// <returns></returns>
    public string UpFileData()
    {
        string strRet = "";
        if (Request.InputStream.Length == 0)
        {
            //没有内容
            strRet = "没有上传文件,文件长度是0。";
            return strRet;
        }
        string strFileName = Convert.ToString(Request["fileName"]);
        if (string.IsNullOrEmpty(strFileName))
        {
            strRet = "文件名称错误,文件上传失败。";
            return strRet;

        }
        string strRoot = BaseComm.CommSub.GetServerPath() + "\\Updata\\";
        if (!System.IO.Directory.Exists(strRoot))
        {
            System.IO.Directory.CreateDirectory(strRoot);
        }
        strRoot += strFileName.Substring(0, 8) + "\\";
        if (!System.IO.Directory.Exists(strRoot))
        {
            System.IO.Directory.CreateDirectory(strRoot);
        }
        strRoot += strFileName;
        if (System.IO.File.Exists(strRoot))
        {
            System.IO.File.Delete(strRoot);

        }

        System.IO.File.WriteAllBytes(strRoot, StreamToBytes(Request.InputStream));

        return "文件【" + strFileName + "】上传完成。";


    }

    /* - - - - - - - - - - - - - - - - - - - - - - - -
    * Stream 和 byte[] 之间的转换
    * - - - - - - - - - - - - - - - - - - - - - - - */
    /// <summary>
    /// 将 Stream 转成 byte[]
    /// </summary>
    public byte[] StreamToBytes(Stream stream)
    {
        byte[] bytes = new byte[stream.Length];
        stream.Read(bytes, 0, bytes.Length);
        // 设置当前流的位置为流的开始
        stream.Seek(0, SeekOrigin.Begin);
        return bytes;
    }
    /// <summary>
    /// 将 byte[] 转成 Stream
    /// </summary>
    public Stream BytesToStream(byte[] bytes)
    {
        Stream stream = new MemoryStream(bytes);
        return stream;
    }

}

 

 

 

C/S端用户提交数据的测试方法方法1:里面有几个类需要引入,自己引入一下就可以了

 

        /// <summary>
        /// 上传字符长到指定服务器测试函数
        /// </summary>
        /// <returns></returns>
        public static string UpdataStringTest()
        {

            //提交已知文本
            //服务器上传Url地址(需要改成你自己本地的服务器地址,具体代码会在下面给出)
            string strUrl = "http://www.my400800.cn";
            string strRet = "";//返回值
            string strFileName = "20100702_0000_0059.csv";//服务器端保存用文件名
            string strUploadCvsText = @"百度
,http://www.baidu.com,192.168.0.12,2010-07-02 08:00:01
google
,http://www.google.com.hk,192.168.0.20,2010-07-02 08:00:01
400电话
,http://www.my400800.cn,192.168.0.11,2010-07-02 08:00:10
电话
,http://www.tel4006.com,192.168.0.122010-07-02 08:00:12
中国移动
,http://www.chinamobile.com,192.168.0.23,2010-07-02 08:00:30
淘宝
,http://www.taobao.com,192.168.0.81,2010-07-02 08:00:60"; //需要上传的文本内容
            CGMWebClient wc = new CGMWebClient();
            wc.Timeout = 10 * 60;//10分钟
            //用默认编码转换网页内容
            Encoding encoding = Encoding.GetEncoding("utf-8");

            if (strUploadCvsText.Length > 10)//文件长度小于10时不上传文件
            {
                byte[] buffer = wc.UploadData(strUrl + "?fileName=" + strFileName, encoding.GetBytes(strUploadCvsText));
                strRet = encoding.GetString(buffer);
                strRet = strRet.Replace(" ", "").Replace("\r\n", "");
            }
            else
            {
                strRet = "【" + strFileName + "】没有可上传数据。";
            }
            return strRet;

        }

 

C/S端用户提交数据的测试方法方法2:里面有几个类需要引入,自己引入一下就可以了

 

        /// <summary>
        /// 上传指定文件到Web服务器测试函数
        /// </summary>
        /// <returns></returns>
        public static string UpdataFileWebServerTest()
        {

            //提交已知文本
            //服务器上传Url地址(需要改成你自己本地的服务器地址,具体代码会在下面给出)
            string strUrl = "http://www.my400800.cn";
            string strRet = "";//返回值
            string strFileName = "20100702_0000_0059.rar";//服务器端保存用文件名
            string strUpFilePath = "E:/test.rar";//你本地文件存放路径,需要根据自己的需求修改
            CGMWebClient wc = new CGMWebClient();
            wc.Timeout = 10 * 60;//10分钟

            if (!System.IO.File.Exists(strUpFilePath))//文件长度小于10时不上传文件
            {
                //用默认编码转换网页内容
                Encoding encoding = Encoding.GetEncoding("utf-8");

                //文件读取
                byte[] readFileByteArr = System.IO.File.ReadAllBytes("strUpFilePath");

                byte[] buffer = wc.UploadData(strUrl + "?fileName=" + strFileName, readFileByteArr);
                strRet = encoding.GetString(buffer);
                strRet = strRet.Replace(" ", "").Replace("\r\n", "");
            }
            else
            {
                strRet = "【" + strFileName + "】没有可上传数据。";
            }
            return strRet;

        }
 

 

 

web端代码(iis6.0,asp.net 2.0)

CsvDataUpload.aspx.cs

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;

public partial class CsvDataUpload : System.Web.UI.Page
{


    protected void Page_Load(object sender, EventArgs e)
    {
        string strResponse = "";
        try
        {
            strResponse = UpFileData();
        }
        catch (Exception ex)
        {

            strResponse = ex.ToString();
        }


        Response.Write(strResponse);
        // Response.Write(UPdataData());
    }


    /// <summary>
    /// 文件上传处理
    /// </summary>
    /// <returns></returns>
    public string UpFileData()
    {
        string strRet = "";
        if (Request.InputStream.Length == 0)
        {
            //没有内容
            strRet = "没有上传文件,文件长度是0。";
            return strRet;
        }
        string strFileName = Convert.ToString(Request["fileName"]);
        if (string.IsNullOrEmpty(strFileName))
        {
            strRet = "文件名称错误,文件上传失败。";
            return strRet;

        }
        string strRoot = BaseComm.CommSub.GetServerPath() + "\\Updata\\";
        if (!System.IO.Directory.Exists(strRoot))
        {
            System.IO.Directory.CreateDirectory(strRoot);
        }
        strRoot += strFileName.Substring(0, 8) + "\\";
        if (!System.IO.Directory.Exists(strRoot))
        {
            System.IO.Directory.CreateDirectory(strRoot);
        }
        strRoot += strFileName;
        if (System.IO.File.Exists(strRoot))
        {
            System.IO.File.Delete(strRoot);

        }

        System.IO.File.WriteAllBytes(strRoot, StreamToBytes(Request.InputStream));

        return "文件【" + strFileName + "】上传完成。";


    }

    /* - - - - - - - - - - - - - - - - - - - - - - - -
    * Stream 和 byte[] 之间的转换
    * - - - - - - - - - - - - - - - - - - - - - - - */
    /// <summary>
    /// 将 Stream 转成 byte[]
    /// </summary>
    public byte[] StreamToBytes(Stream stream)
    {
        byte[] bytes = new byte[stream.Length];
        stream.Read(bytes, 0, bytes.Length);
        // 设置当前流的位置为流的开始
        stream.Seek(0, SeekOrigin.Begin);
        return bytes;
    }
    /// <summary>
    /// 将 byte[] 转成 Stream
    /// </summary>
    public Stream BytesToStream(byte[] bytes)
    {
        Stream stream = new MemoryStream(bytes);
        return stream;
    }

}

 

 

CsvDataUpload.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CsvDataUpload.aspx.cs" Inherits="CsvDataUpload" %>
 
0
0
分享到:
评论

相关推荐

    C#中WebClient实现文件下载

    在C#中,可以通过设置`HttpWebRequest.CachePolicy`来控制缓存行为。例如,设置为`RequestCacheLevel.Reload`可以强制重新加载数据,忽略缓存: ```csharp HttpWebRequest request = (HttpWebRequest)WebRequest....

    C# WebClient 上传文件

    ### C# WebClient 上传文件知识点解析 #### 一、引言 在开发过程中,经常会遇到需要将客户端的文件上传到服务器的需求。C#语言提供了多种方法来实现这一功能,其中`WebClient`类就是一种非常简便的方式。本文将详细...

    C# 中WebClient 类下载文件

    本程序就主要是通过C# 中的WebClient 类实现对文件的下载功能,其中涉及到进度条,对下载成功与下载失败都会给出相应的提示,本程序是通过VS 2005 开发的,希望给需要在项目中用到下载这个功能的人有所帮助!...

    基于c#的webapi断点续传几种方式及webclient断点续传下载.zip

    本资料包“基于C#的WebAPI断点续传几种方式及WebClient断点续传下载.zip”主要探讨了两种在C#环境下实现断点续传的方法:一是通过WebAPI实现服务端的断点续传功能,二是使用WebClient类进行客户端的断点续传下载。...

    C# 使用WebClient类 下载网络指定资源

    总结来说,C#中的WebClient类为开发者提供了方便地下载网络资源的能力。通过订阅DownloadProgressChanged和DownloadFileCompleted事件,我们可以实现下载进度和速度的实时显示,以及下载完成后的提示。同时,利用...

    C# WEBClient 文件上传下载

    总结来说,`WebClient`类在C#中提供了简便的文件上传和下载功能。通过设置HTTP头、处理进度事件和错误检查,我们可以实现高效且用户友好的文件传输功能。在处理大量或大文件时,合理地使用异步操作和流处理可以显著...

    WebClient下载文件展示进度条

    在C#编程中,WebClient类是一个非常实用的工具,用于执行HTTP请求,特别是下载文件。在用户界面中展示下载进度条是提升用户体验的重要手段,特别是在处理大文件时。本篇将详细介绍如何使用WebClient下载文件并同时...

    C#使用WebClient获取网页源文件例子

    在C#中,要使用`WebClient`,你需要引入`System.Net`命名空间: ```csharp using System.Net; ``` 接着,你可以创建`WebClient`对象实例,然后调用其`DownloadString`方法来下载指定URL的HTML源代码。例如,要下载...

    C#实现IIS服务器下载文件

    C#实现IIS服务器下载文件 本文将详细介绍如何使用C#语言实现IIS服务器下载文件的功能。通过使用WebClient类和FileStream类,可以实现高抽象程度的Internet通讯服务,并将网络文件下载到本地。 一、概述 本文通过...

    C# http方式文件上传客户端

    在C#编程环境中,开发一个HTTP文件上传客户端是一项常见的任务,尤其在构建Web应用程序或集成API接口时。本文将深入探讨如何使用C#实现在HTTP协议基础上的文件上传功能,并展示上传进度,确保程序的正确运行。 首先...

    C# 通过WebService上传视频文件到服务器虚拟机下源码

    在C#中,我们通常使用ASP.NET来创建Web服务,它支持SOAP(简单对象访问协议)和RESTful API两种主要的通信模式。在本例中,我们将构建一个SOAP Web Service,它接收客户端上传的视频文件,并将其保存到服务器虚拟机...

    WebClient 上传文件到 iis

    总之,利用C#的WebClient类上传文件到IIS是一项常见的任务,通过理解HTTP协议和WebClient类的工作原理,我们可以方便地实现在Web应用程序中与服务器进行数据交互。对于大型项目,还可以考虑使用更高级的库,如...

    C# web文件下载类

    总结来说,"C# Web文件下载类"是针对C#环境下的Web文件下载需求而设计的一个实用工具,它封装了HTTP请求和响应的处理,提供了下载进度跟踪、错误处理等附加功能,使得开发者能够更加便捷、高效地实现文件下载。...

    C#中使用WebClient下载指定url的网络照片示例源码.zip

    通过这个例子,你可以了解到C#中使用WebClient类进行文件下载的基本步骤,以及如何处理异步操作的进度和完成事件。这对于开发需要从网络获取数据的应用程序非常有用,例如下载文件、抓取网页内容等。在实际项目中,...

    C#通过webclient下载demo

    在这个"C#通过WebClient下载demo"中,我们将深入探讨如何使用`WebClient`来实现文件的下载,并关注如何在下载过程中显示进度。 `WebClient`类位于`System.Net`命名空间下,它提供了异步和同步方法来处理网络请求。...

    用Visual Csharp实现文件下载.rar_c# webclient_csharp 下载_下载_文件下载_文件传输

    总结一下,C#中的`WebClient`和`FileStream`类是实现文件下载的核心工具。通过`WebClient`的`DownloadFile`或`OpenRead`方法,结合`FileStream`的读写操作,我们可以方便地从网络下载文件到本地。同时,可以利用事件...

    c# 实现文件FTP上传服务器

    c# 实现文件FTP上传至服务器  WebClient上传文件至服务器(不带进度条)    要上传的文件(全路径格式)  &lt;param name="strUrlDirPath"&gt;Web服务器文件夹路径  &lt;returns&gt;True/False是否上传成功&lt;/returns&gt;

    C#webClient.DownloadFileAsync异步源码

    总结,`WebClient.DownloadFileAsync`是C#中异步下载文件的一种简便方法,适合新手学习。通过理解异步编程的基本原理,注册适当的事件处理程序,你可以创建更高效的C#应用程序。在实际项目中,记得根据需求选择合适...

    C#多服务器多文件上传实例

    在C#中,可以使用HTTP客户端库如HttpClient或WebClient来发送文件到各个服务器。负载均衡可以通过第三方工具如Nginx或应用内部逻辑来实现,根据预设规则将文件分发到不同服务器。 其次,“多文件上传”涉及到批量...

Global site tag (gtag.js) - Google Analytics