【问题标题】:Pause/Resume Upload in C#在 C# 中暂停/恢复上传
【发布时间】:2010-11-06 02:34:51
【问题描述】:

我正在寻找一种通过 C# 的 WebClient 暂停或恢复上传过程的方法。

伪代码:

WebClient Client = new WebClient();
Client.UploadFileAsync(new Uri("http://mysite.com/receiver.php"), "POST", "C:\MyFile.jpg");

也许像..

Client.Pause();

有什么想法吗?

【问题讨论】:

  • 同意乔恩的观点!我实际上打开了这个问题,因为我很想知道 C# 和 PHP 是如何相处的;)

标签: c# upload webclient


【解决方案1】:

好的,不给你代码示例,我会告诉你你能做什么。

为您的上传编写一个 WCF 服务,该服务需要使用流式传输。

要记住的事情:

  • 客户端和服务器需要识别 该文件是我建议使用的一些方法 一个 Guid,所以服务器知道什么 文件以附加额外的数据。
  • 客户端需要跟踪 在数组中的位置,所以它知道 在它之后从哪里开始流式传输 恢复它。 (你甚至可以得到 服务器告诉客户端多少钱 它拥有的数据,但请确保客户端 也知道)。
  • 服务器需要跟踪如何 它已经下载了很多数据 以及还缺少多少。文件 应该有一生的时间 服务器,你不想上传一半 和被遗忘的文件存储在 永远的服务器。
  • 请记住,流式传输确实 不允许身份验证,因为 整个调用只是一个 httprequest。 您可以使用 ssl 但请记住 会增加开销。
  • 您需要创建服务 消息级标准合同 方法不行。

我目前正在写一篇关于这个主题的博客文章,它将在本周发布,其中包含如何使其工作的代码示例。

你可以在My blog查看它

我知道这不包含代码示例,但博客会有一些,但总而言之,这是停止和恢复文件上传到服务器的一种方式。

【讨论】:

    【解决方案2】:

    要执行此类操作,您必须编写自己的工作线程,逐步执行实际的 http 发布。

    在发送之前,您必须检查操作是否已暂停并停止发送文件内容,直到它恢复为止。

    但是,根据服务器的不同,如果连接在一段时间内不活动,则可能会关闭连接,这可能只是几秒钟。

    【讨论】:

      【解决方案3】:

      正如 Jon Skeet 所说,这在 Webclient 而非 HttpWebRequest 类中不可用。

      但是,如果您可以控制接收上传的服务器;也许您可以使用 WebClient 上传文件的小块,并在收到所有文件后让服务器组装这些块。然后,您会更容易制作暂停/恢复功能。

      如果您无法控制服务器,您将需要使用一个 API,该 API 只为您提供控制权,随后您需要担心更多的事情。即便如此,如果你暂停太久,服务器可能会给你一个超时。

      【讨论】:

        【解决方案4】:

        WebClient 没有这种功能——据我所知,即使是稍低级别的HttpWebRequest 也没有。您需要使用一个 HTTP 库,它可以让您在事情发生时更好地控制确切(当然,这也将涉及更多代码)。 WebClient 的重点是提供一个非常简单的 API 以在非常简单的情况下使用。

        【讨论】:

          猜你喜欢
          • 2014-05-06
          • 2018-12-02
          • 2020-08-13
          • 1970-01-01
          • 2015-08-31
          • 2011-08-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多