我有一个需要将大文件上传到服务器的Silverlight应用程序。我已经看过使用WebClient和HttpWebRequest上传,但是我没有看到使用任一选项流式传输上传的明显方法。做到文件大小,在上传不合理之前将整个内容加载到内存中。这在Silverlight中是否可行?
答案 0 :(得分:1)
Silverlight中的WebClient无法提供使用进度事件将Stream抽取到服务器的方法,这似乎是不同寻常的。它特别令人惊叹,因为这是一个字符串上传!
可以使用HttpWebRequest对您想要的内容进行编码。
在BeginGetRequestStream
的回调中,您可以获取传出请求的Stream,然后从文件的Stream中读取块并将其写入输出流。不幸的是,在输出流关闭之前,Silverlight不会开始将输出发送到服务器。所有这些数据最终都存储在同时我不知道的情况下,如果它变得足够大可能会使用一个临时文件,以免给机器内存带来压力但是它可能只是将它全部存储在内存中反正。
可能的唯一解决方案是通过套接字编写HTTP协议。
答案 1 :(得分:1)
你可以采用“分块”的方法。 Codeplex上的Silverlight文件上传器使用这种技术:
http://www.codeplex.com/SilverlightFileUpld
给定块大小(例如10k,20k,100k等),您可以拆分文件并使用HTTP请求将每个块发送到服务器。服务器将需要处理每个块并在每个块到达时重新组装文件。在存在多个Web服务器的Web场方案中 - 请注意不要在Web服务器上使用本地文件系统来实现此方法。