我有一个需要上传大文件到服务器的Silverlight应用程序。我已经看过使用WebClient和HttpWebRequest进行上传,但是我没有看到用任何选项流式传输上传的明显方式。按照文件的大小,在上传之前将整个内容加载到内存中是不合理的。这在Silverlight中可能吗?Silverlight流媒体上传
回答
你可以用“分块”的方法去。 CodePlex上,基于Silverlight的文件上传使用这种技术:
http://www.codeplex.com/SilverlightFileUpld
鉴于块大小(如10K,20K,100K,等等),你可以分割的文件,并使用HTTP每个块发送到服务器请求。服务器需要处理每个块,并在每个块到达时重新组合文件。在有多个Web服务器的Web场景中 - 请注意不要使用Web服务器上的本地文件系统进行此方法。
如何坚持的“块任何想法'在服务器端(比如在WCF中)并重新组装? – atconway 2011-10-04 14:19:14
我已经使用了两种方法:1)每个块保存为文件系统上的文件,因为它到达,然后重新组装在正确的顺序文件的所有数据块被写入后2)保存每个块存储为二进制数据一个数据库然后重新组装。如果您的站点在多个Web服务器上进行负载均衡,则需要使用技术#2或某种分布式文件系统。 – kindohm 2011-10-04 15:33:54
由于我的文件系统位置位于WCF服务器所在的同一台服务器上,并且它不是一个负载均衡的服务器,所以我认为#1会很好地工作。你有没有写大块和重组的例子?你会用什么样的读写器?谢谢您的帮助。 – atconway 2011-10-04 20:13:22
它似乎奇特,在Silverlight Web客户端未能提供泵的流与进度事件服务器的一种手段。它特别令人惊叹,因为它提供了一个字符串上传!
是可能的代码会是什么似乎做你想要什么用的HttpWebRequest。
在回调BeginGetRequestStream
时,您可以获取传出请求的Stream,然后从文件的Stream中读取块并将它们写入输出流。不幸的是,直到输出流已关闭,Silverlight才开始将输出发送到服务器。在所有这些数据最终都被存储的同时,我不知道,如果它足够大,SL可能使用一个临时文件,以免压缩机器内存,但它可能只是将其全部存储在内存中无论如何。
的唯一解决这个可能是可能的是写通过套接字HTTP协议。
我throught一些关于插槽和问题是,Silverlight的套接字无法连接到端口80(仅4502至4534) – herbrandson 2009-12-10 04:36:53
- 1. 流媒体上传请求?
- 2. Silverlight流媒体视频
- 3. VLC上的RTSP流媒体
- 4. sparkR流媒体?
- 5. jquery PHP媒体上传库
- 6. RDDs和SPARK流媒体传播器
- 7. HEIF媒体可以流式传输吗?
- 8. WCF流媒体文件传输
- 9. 流媒体到Adobe媒体服务器
- 10. Android媒体播放器流媒体
- 11. 通过udp流媒体h264/aacplus媒体
- 12. 流媒体直播Icecast流
- 13. 流媒体长度
- 14. ReadTimeoutError:Twitter流媒体API
- 15. 流媒体元素
- 16. Android MediaRecorder流媒体
- 17. 用户上传的流媒体视频文件
- 18. 流媒体网络上传到机架插座
- 19. 如何在Azure媒体服务上流式传输上传的视频
- 20. Silverlight媒体播放器
- 21. 用azure托管silverlight媒体
- 22. Silverlight中的媒体查询
- 23. 流媒体导轨(上载中)
- 24. 流媒体视频达尔文流媒体服务器问题
- 25. 将媒体文件从外部URL上传到WordPress媒体库
- 26. 服务流式传输内容,无流媒体分发
- 27. C中的流媒体压缩库用于流式传输
- 28. 如何在Silverlight中显示媒体元素的时间流逝?
- 29. 使用silverlight进行流媒体直播4
- 30. 流媒体,SIlverlight MediaFramework,不在设备中播放
+1一个非常好的问题,希望我有一个很好的答案。我们在谈论多大的文件? – AnthonyWJones 2009-12-06 22:55:52
有wav文件可能高达约150+兆 – herbrandson 2009-12-07 00:05:08