在C#中暂停/恢复上传

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

伪代码:

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

也许像..

  Client.Pause(); 

任何的想法?

WebClient没有这种function – 据我所知,即使是稍低级别的HttpWebRequest也没有。 您需要使用一个HTTP库,它可以让您更准确地控制事情的发生时间(当然,这无疑会涉及更多代码)。 WebClient是提供一个非常简单的API,以便在非常简单的情况下使用。

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

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

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

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

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

要记住的事情:

  • 客户端和服务器需要识别文件一些我如何建议使用Guid,以便服务器知道要附加额外数据的文件。
  • 客户端需要跟踪数组中的位置,以便在恢复数据后知道从何处开始流式传输。 (你甚至可以让服务器告诉客户端它有多少数据但确保客户端也知道)。
  • 服务器需要跟踪已下载的数据量以及丢失的数据量。 文件应该在服务器上有生命周期,你不希望永久存储在服务器上的一半上传和遗忘文件。
  • 请记住,流式传输不允许身份validation,因为整个呼叫只是一个httprequest。 您可以使用ssl但请记住这会增加开销。
  • 您需要在消息级别标准方法中创建服务合同。

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

你可以在我的博客上查看

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

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

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

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