2010-03-19 4 views
2

ASP.NET 웹 사이트에 파일 업로드 기능을 추가해야하며 아직 업로드하는 동안 서버에서 파일의 작은 부분을 읽을 수 있기를 원합니다. 엿보기 또는 미리보기 형식의 기능으로 콘텐츠를 결정하고 사용자가 아직 업로드하는 동안 사용자에게 피드백을 줄 수 있습니다 (여기서 우리는 큰 파일에 대해 이야기하고 있습니다). 이 일을 할 수있는 방법이 있습니까? 일단 선택한 파일의 고정 된 수의 바이트 만 업로드 한 다음 커버 아래에서 전체 파일의 다른 업로드를 시작하는 사용자 지정 컨트롤을 작성하는 최악의 경우를 생각하고 있습니다. 이것조차도 가능하지 않지만 어쨌든 좀 더 우아한 해결책을 찾고 있습니다 ... 고마워요!HTTP를 통해 Windows 상자에 업로드하는 동안 파일을 "엿보는"방법이 있습니까?

+0

다른 사람들을 위해서 우리는 ScaleUP이라는 타사 솔루션을 구입했습니다. (회사와 아무 관계가 없습니다.) 매우 잘 작동하여 업로드 스트림에서 간단한 필터를 작성했습니다. 이것은 IIS7 전용 솔루션이지만 제품 및 지원 직원을 적극 추천합니다. – iisystems

답변

1

대용량 파일 업로드 중에 "죽음의 흰색 화면"이 나타나지 않는 것처럼 들립니다. 그렇다면 업로드 중에 진행률 표시 줄을 제공하는 Telerik's RadUpload control을 살펴볼 수 있습니다.

자신 만의 롤을 만들고 싶다면 시범 복사본을 디 컴파일하여 아이디어를 얻으십시오. 나는이 방법으로 소스를 엿보고 사용자 정의 HttpModule과 HttpHandler를 조합하여 진행률 표시 줄을 컨트롤합니다. 모듈이 "완료율"정보를 제공하는 동안 처리기는 스트리밍 방식으로 파일을 라우팅합니다. 내가 그것을 보았던 이래로 그것은 2,3 년이었다.

편집 :

는 사실, 난 파일을 업로드하는 중입니다 같은 서버 측 처리를 할 노력하고있어. HTTP를 통해 사용자 데이터를 가져오고 싶지만 파일이 아직 업로드 중일 때 데이터를 처리하는 방법에 대한 미리보기/옵션 (열 정의 등)을 사용자에게 보여주고 싶습니다. 무슨 일이 있어도 파일을 그대로 가져올 것이므로 업로드를 중단 할 필요가 없습니다. 업로드되는 동안 파일의 상대적으로 작은 부분을 읽는 것을 기준으로 업로드하는 동안 실제로 상호 작용하기를 원한다면 여전히 동일한 접근 방식을 권장할까요?

글쎄 ... 매우 어렵고 크로스 브라우저에서 작동하지 않을 수도 있지만이 방법으로 수행 할 수 있습니다.

내가 언급 한 것처럼 들어오는 파일을 완전히 스트림으로 처리 할 수 ​​있기 때문에 초기 처리에서 스트림 처리의 일부로 일부 상태를 업데이트 할 수 있습니다. 스트림으로 처리하지 않으면 전체 파일 업로드가 이루어질 때까지 기다려야합니다.

문제는 다음과 같습니다. 파일 업로드 중에 더 이상 HTML 기반 상호 작용을 할 수 없습니다. 게시물이 계속 줄어들지 않으면 업로드가 실패합니다. 대부분의 브라우저는 javascript가 게시 도중 페이지 DOM을 계속 실행하고 업데이트 할 수 있기 때문에 링크 된 컨트롤은 전혀 작동하지 않습니다.

그래서이 작업을 수행하려면 HttpHandler에서 처리하는 XmlHttpRequest 호출을 통해 클라이언트로 다시 전송되는 HttpModule에서 파일을 처리하는 동안 서버 측 일부 표준화 된 상태를 업데이트해야합니다. 순수한 javascript/DOM을 사용하여 사용자의 UI를 업데이트해야합니다.

그래서 내가 말한 것처럼 복잡하고 브라우저 간 버그가있을 가능성이 있지만 이론적으로는 할 수 있습니다.

더 안정적 일 수는 있지만 어쩌면 실현 가능성이있는 변경 사항이 있습니다. 업로드하기 전에 파일을 사전 처리하고 ActiveX 컨트롤 또는 Click-Once .NET 응용 프로그램을 빌드하고 파일을 비동기 적으로 전송할 수도 있습니다 사용자는 브라우징을 계속한다. 일부 사용자는 해당 옵션을 좋아하지 않을 수 있습니다. 배포 시나리오의 세부 사항을 모르지만 옵션입니다.

+0

사실, 파일이 아직 업로드 중이기 때문에 서버 측 처리를 시도하고 있습니다. HTTP를 통해 사용자 데이터를 가져오고 싶지만 파일이 아직 업로드 중일 때 데이터를 처리하는 방법에 대한 미리보기/옵션 (열 정의 등)을 사용자에게 보여주고 싶습니다. 무슨 일이 있어도 파일을 그대로 가져올 것이므로 업로드를 중단 할 필요가 없습니다. 업로드되는 동안 파일의 상대적으로 작은 부분을 읽는 것을 기준으로 업로드하는 동안 실제로 상호 작용하기를 원한다면 여전히 동일한 접근 방식을 권장할까요? – iisystems

+0

@ iisystems : 귀하의 커미션에 대한 응답으로 답변을 업데이트했습니다. – Randolpho

+0

분명히 여기에 몇 가지 도전이 있지만, 이것은 매우 도움이되었습니다. 다시 한번 감사드립니다 Randolpho! – iisystems

0

HTTPHEAD 방법이 있지만 PEEK이 아닙니다.

HEAD은 파일에 대한 정보와 헤더를 제공합니다.

물론 원하는 모든 작업을 수행 할 수있는 특별한 요청 처리기를 만들 수 있습니다. 정적 자원으로 작업 할 필요가 없으며 원하는 응답을 동적으로 작성할 수 있습니다.