在C#中暂停/恢复上传

时间:2009-06-26 10:12:07

标签: c# upload webclient

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

伪代码:

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

也许像..

Client.Pause();

任何想法?

4 个答案:

答案 0 :(得分:6)

WebClient没有这种功能 - 就我所知,即使是较低级别的HttpWebRequest也没有。您需要使用一个HTTP库,当事情发生时,您可以更好地控制 (当然,这无疑会涉及更多代码)。 WebClient的要点是提供一个非常简单的API,以便在非常简单的情况下使用。

答案 1 :(得分:3)

如Jon Skeet所述,Webclient中没有HttpWebRequest类。

但是,如果您拥有对服务器的控制权,则会收到上传;也许您可以使用WebClient上传文件的小块,并让服务器在收到所有块时组装块。然后,您可以更轻松地制作暂停/恢复功能。

如果您无法控制服务器,则需要使用仅提供控制权的API,然后为您提供更多需要担心的内容。即便如此,如果您停留太久,服务器可能会给您一个暂停时间。

答案 2 :(得分:2)

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

为您的上传写一个WCF服务,该服务需要使用流媒体。

要记住的事情:

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

我目前正在撰写有关该主题的博客文章,本周将发布有关如何使其正常运行的代码示例。

您可以在My blog

上查看

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

答案 3 :(得分:0)

要做这样的事情,你必须编写自己的工作线程,逐步执行实际的http post。

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

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