在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。
在发送之前,您必须检查操作是否已暂停并停止发送文件内容,直到恢复为止。
但是,根据服务器的不同,如果连接在一段时间内没有激活,则可以关闭连接,这可能只需几秒钟。