Mam aplikację Silverlight, która musi przesłać duże pliki na serwer. Przyjrzałem się przesyłaniu przy użyciu zarówno WebClient, jak i HttpWebRequest, jednak nie widzę oczywistego sposobu przesyłania strumienia z żadną opcją. Zrób do rozmiaru plików, ładując całą zawartość do pamięci, zanim upakowanie nie będzie rozsądne. Czy to możliwe w Silverlight?Przesyłanie strumieniowe Silverlight
Odpowiedz
Można zastosować podejście "kłujące". Silverlight File Uploader na Codeplex wykorzystuje tę technikę:
http://www.codeplex.com/SilverlightFileUpld
Biorąc pod uwagę wielkość kawałek (np 10k, 20k, 100k, etc), można podzielić plik i wysłać każdy kawałek z serwerem za pomocą protokołu HTTP żądanie. Serwer będzie musiał obsłużyć każdą porcję i ponownie skompletować plik, gdy nadejdzie każdy kawałek. W scenariuszu farmy internetowej, gdy jest wiele serwerów sieciowych - należy uważać, aby nie używać lokalnego systemu plików na serwerze WWW dla tego podejścia.
Każdy pomysł, jak utrwalić "kawałki" "po stronie serwera (powiedzmy w WCF) i ponownie zmontować? – atconway
Użyłem dwóch technik: 1) zapisz każdą porcję jako plik w systemie plików, gdy się pojawi, a następnie ponownie zmontuj pliki we właściwej kolejności po zapisaniu wszystkich porcji i 2) zapisz każdą porcję jako dane binarne w bazę danych, a następnie ponownie zmontuj. Będziesz musiał użyć techniki # 2 lub jakiegoś rozproszonego systemu plików, jeśli Twoja strona jest ładowana na więcej niż jednym serwerze WWW. – kindohm
Ponieważ moja lokalizacja systemu plików znajduje się na tym samym serwerze, na którym istnieje serwer WCF i jest * nie * serwerem równoważenia obciążenia, myślę, że # 1 będzie działać naprawdę dobrze. Czy masz jakieś przykłady pisania fragmentów i ponownego składania? Jakiego rodzaju czytnika/pisarza używałbyś? Dzięki za pomoc. – atconway
Wydaje się niezwykłe, że WebClient w Silverlight nie zapewnia sposobu pompowania strumienia do serwera z postępem zdarzeń. Jest to szczególnie niesamowite, ponieważ jest to oferowane do przesyłania ciąg!
Możliwe jest zakodowanie tego, co wydaje się robić, co chcesz, za pomocą HttpWebRequest.
Podczas oddzwonienia do BeginGetRequestStream
można uzyskać strumień dla wychodzącego żądania, a następnie odczytać porcje ze strumienia pliku i zapisać je do strumienia wyjściowego. Niestety Silverlight nie rozpoczyna wysyłania danych wyjściowych na serwer, dopóki strumień wyjściowy nie zostanie zamknięty. Tam, gdzie wszystkie te dane są przechowywane, nie wiem, możliwe, że jeśli będzie wystarczająco duży, SL może użyć pliku tymczasowego, aby nie obciążać pamięci urządzenia, ale może po prostu zapisać je w pamięci tak czy inaczej.
Jedynym rozwiązaniem, które może być możliwe, jest napisanie protokołu HTTP przez gniazda.
Piszę trochę o gniazdach i problem polega na tym, że gniazda Silverlight nie mogą łączyć się z portem 80 (tylko od 4502 do 4534) – herbrandson
- 1. Przesyłanie strumieniowe z iCloud?
- 2. Przesyłanie strumieniowe RTSP na RTMP
- 3. Jak działają przesyłanie strumieniowe wideo?
- 4. Przesyłanie strumieniowe WCF na ASMX?
- 5. PHP: zwijanie i przesyłanie strumieniowe
- 6. Przesyłanie strumieniowe wideo na żywo z ios
- 7. Przesyłanie strumieniowe pliku CSV w Django
- 8. Orurowanie/przesyłanie strumieniowe obiektów JavaScript w Node.js
- 9. Strumieniowe przesyłanie tekstu dla długotrwałej akcji?
- 10. Jednoczesne przesyłanie strumieniowe i zapisywanie wideo?
- 11. Czy S3 obsługuje przesyłanie strumieniowe HTTP?
- 12. Przesyłanie strumieniowe plików wideo MP4 na Gstreamer
- 13. Przesyłanie strumieniowe wideo z MediaRecorder poprzez LocalSocket
- 14. Przesyłanie strumieniowe plików multimedialnych za pomocą WebRTC
- 15. Strumieniowe przesyłanie wideo MVC do przeglądarek mobilnych
- 16. Przesyłanie strumieniowe z M3U na Androidzie
- 17. Przesyłanie strumieniowe plików zdalnych do obiektów plików
- 18. Przesyłanie strumieniowe do usług Azure Media Services
- 19. Silverlight 4: Przesyłanie plików na serwer
- 20. Jak połączyć tablicę bajtów i strumieniowe przesyłanie dźwięku?
- 21. Przesyłanie strumieniowe wideo z obrazu za pomocą FFMPEG na Windows
- 22. Przesyłanie strumieniowe plików Avi z C# przy użyciu RTP
- 23. Strumieniowe przesyłanie wideo (lub pobieranie progresywne) do Droid Browser
- 24. Przesyłanie strumieniowe z pośrednikiem w systemie Windows 8
- 25. Node.js/Ekspresowe przesyłanie strumieniowe wideo (HTTP 206 Częściowa zawartość)
- 26. Przesyłanie strumieniowe wideo z systemem Android - wymagany współczynnik proporcji
- 27. Przesyłanie strumieniowe kamer IP na stronę za pomocą PHP?
- 28. Przesyłanie strumieniowe Hadoop do Pythona przy użyciu mongo-hadoop
- 29. Przesyłanie strumieniowe danych z klienta za pomocą wpisu HTTP
- 30. Strumieniowanie/przesyłanie strumieniowe JSON.stringify output w Node.js/Express
+1 Naprawdę dobre pytanie, chciałbym mieć dobrą odpowiedź. Jak duży plik mówimy? – AnthonyWJones
Tam pliki wav, które mogą wynosić nawet około 150+ megs – herbrandson