2009-12-06 3 views
5

큰 파일을 서버에 업로드해야하는 Silverlight 응용 프로그램이 있습니다. WebClient와 HttpWebRequest를 사용하여 업로드를 살펴 보았습니다. 그러나 두 옵션 중 하나를 사용하여 업로드하는 스트림이 확실한 방법으로 표시되지 않습니다. uplaoding이 합리적이지 않기 전에 파일의 크기만큼 메모리에 전체 내용을로드하십시오. 실버 라이트에서도 가능합니까?Silverlight 스트리밍 업로드

+0

+1 정말 좋은 질문입니다. 좋은 답변을 보내고 싶습니다. 얼마나 큰 파일을 말하는거야? – AnthonyWJones

+0

최대 150 메가까지의 wav 파일이 있습니다. – herbrandson

답변

1

"청킹"방식을 사용할 수 있습니다. 코드 플렉스에 실버 라이트 파일 업 로더는이 기술을 사용하여 청크 크기를 감안할 때

http://www.codeplex.com/SilverlightFileUpld

(예 : 10K, 20K, 100K 등), 파일을 분할하고 HTTP를 사용하여 서버에 각 청크를 보낼 수 있습니다 의뢰. 서버는 각 청크를 처리하고 청크가 도착할 때마다 파일을 다시 어셈블해야합니다. 여러 웹 서버가있는 웹 팜 시나리오에서 -이 접근 방식에 대해 웹 서버에서 로컬 파일 시스템을 사용하지 않도록주의하십시오.

+0

'청크를 유지하는 방법에 대한 아이디어 '서버 측에서 (WCF에서 말하며) 다시 어셈블 할 수 있습니까? – atconway

+1

필자는 두 가지 기술을 사용했습니다. 1) 각 청크를 파일 시스템에 파일로 저장 한 다음 모든 청크를 작성한 후 올바른 순서로 파일을 다시 어셈블하고 2) 각 청크를 다음과 같이 2 진 데이터로 저장합니다. 데이터베이스를 만든 다음 다시 어셈블하십시오. 기술 # 2 또는 사이트가 두 개 이상의 웹 서버에서로드 균형을 조정하는 경우 일종의 분산 파일 시스템을 사용해야합니다. – kindohm

+0

내 파일 시스템 위치가 WCF 서버가있는 서버와 같은 위치에 있고 부하 분산 서버가 아니기 때문에 # 1이 정말 잘 작동한다고 생각합니다. 청크를 쓰고 재 조립하는 예가 있습니까? 어떤 종류의 리더/라이터를 사용하십니까? 도와 주셔서 감사합니다. – atconway

1

Silverlight의 WebClient가 진행 이벤트로 서버에 스트림을 펌프하는 수단을 제공하지 못하는 것 같습니다. 이것 때문에 문자열 업로드에 특히 좋습니다!

HttpWebRequest로 원하는 것을 수행하는 것으로 보이는 코드를 코딩 할 수 있습니다.

BeginGetRequestStream의 콜백에서 나가는 요청에 대한 스트림을 가져온 다음 파일 스트림에서 청크를 읽고 출력 스트림에 쓸 수 있습니다. 불행히도 Silverlight는 출력 스트림이 닫힐 때까지 출력을 서버로 보내지 않습니다. 이 모든 데이터가 그동안 저장되는 곳에서 끝나는 곳은 내가 알지 못합니다. SL이 충분히 커지면 SL이 임시 파일을 사용하여 기계 메모리에 스트레스를주지 않게 할 수도 있지만 다시 메모리에 모두 저장할 수 있습니다. 어쨌든.

가능할 수도있는 유일한 해결책은 소켓을 통해 HTTP 프로토콜을 작성하는 것입니다.

+0

소켓에 대해서는 약간의 문제가 있으며, Silverlight 소켓은 포트 80 (4502 ~ 4534)에만 연결할 수 없습니다. – herbrandson

관련 문제