代码之家  ›  专栏  ›  技术社区  ›  herbrandson

Silverlight流式上载

  •  5
  • herbrandson  · 技术社区  · 15 年前

    我有一个Silverlight应用程序需要将大文件上载到服务器。我看过使用webclient和httpwebrequest进行上传,但是我看不到一个明显的方法来使用这两个选项进行上传。对于文件的大小,在上载之前将整个内容加载到内存中是不合理的。这在Silverlight中是可能的吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   kindohm    15 年前

    你可以用“分块”的方法。codeplex上的Silverlight文件上载程序使用以下技术:

    http://www.codeplex.com/SilverlightFileUpld

    给定一个块大小(例如,10K、20K、100K等),您可以分割文件并使用HTTP请求将每个块发送到服务器。服务器将需要处理每个块,并在每个块到达时重新组装文件。在Web场场景中,当存在多个Web服务器时,请注意不要将Web服务器上的本地文件系统用于此方法。

        2
  •  1
  •   AnthonyWJones    15 年前

    Silverlight中的WebClient未能提供一种将流与进度事件一起泵送到服务器的方法,这似乎很奇怪。特别令人惊讶的是,它提供了一个字符串上传!

    可以用httpwebrequest编写看起来正在执行的操作的代码。

    在回电中 BeginGetRequestStream 您可以获取传出请求的流,然后从文件流中读取块并将其写入输出流。不幸的是,在关闭输出流之前,Silverlight不会开始向服务器发送输出。我不知道这些数据最终会被存储在什么地方,如果它足够大,SL可能会使用一个临时文件,这样就不会对机器内存造成压力,但又可能只是将它全部存储在内存中。

    唯一可能的解决方案是通过套接字编写HTTP协议。