我有一個需要上傳大文件到服務器的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. WCF流媒體文件上傳300MB +
- 4. Objective-C流媒體上傳音頻
- 5. 上傳媒體
- 6. 用nginx流媒體(流暢流媒體)
- 7. 在wowza媒體流安全流媒體
- 8. Android上的PHP媒體流
- 9. VLC上的RTSP流媒體
- 10. Youtube流媒體
- 11. sparkR流媒體?
- 12. jquery PHP媒體上傳庫
- 13. 媒體上傳代碼400
- 14. Django媒體上傳到AS3
- 15. RDDs和SPARK流媒體傳播器
- 16. HEIF媒體可以流式傳輸嗎?
- 17. WCF流媒體文件傳輸
- 18. 流媒體到Adobe媒體服務器
- 19. Android媒體播放器流媒體
- 20. 通過udp流媒體h264/aacplus媒體
- 21. 流媒體直播Icecast流
- 22. Silverlight中的媒體查詢
- 23. Silverlight媒體播放器
- 24. 用azure託管silverlight媒體
- 25. Twitter流媒體API
- 26. ReadTimeoutError:Twitter流媒體API
- 27. Android MediaRecorder流媒體
- 28. 流媒體元素
- 29. 流媒體長度
- 30. 流媒體視頻
+1一個非常好的問題,希望我有一個很好的答案。我們在談論多大的文件? – AnthonyWJones 2009-12-06 22:55:52
有wav文件可能高達約150+兆 – herbrandson 2009-12-07 00:05:08