2011-01-17 2 views
3

장고 기반 프런트 엔드에 웹 서비스를 제공하는 Pylons 응용 프로그램이 있습니다. 파일 업로드를 제공하고 응용 프로그램 사용자에게 다운로드 할 수 있어야합니다.django-> pylons 파일 업로드 도구를 개발하는 방법은 무엇입니까?

기본적으로 프런트 엔드에 파일을 업로드합니다 (문자 그대로 아무것도 아니지만 종종 매우 클 수 있음). 파일은 client => django web server => pylons app server => 내부 파일 서버에서 전송됩니다.

내부 파일 서버는 API를 제공하지 않습니다. 파일을 넣을 수있는 유일한 방법은 scp입니다. 따라서 스트리밍은 파일론 => fserv 단계와 관련이 없습니다. 더욱이 fserv는 django 앱이 사는 네트워크 계층에서 액세스 할 수 없습니다.

역순으로, fserv는 웹 서버에서 여전히 액세스 할 수없는 파일에 대한 HTTP 액세스 방법을 제공하므로 fserv => pylons => django에서 스트림을 연결해야합니다.

이 프로세스의 Pylons 측면은 어떤 모습입니까? 이러한 파일 작업의 대기 시간을 최소화하려면 어떻게해야합니까? 나는 그것을받은 후에 전체 파일을 보내야한다는 점을 감안할 때 필자가 쓰기 작업에 갇혀 있다는 것을 안다.

또한이 프로세스의 장고 쪽은 어떻게 생겼을까요? 스트리밍 업로드 서비스에 파일을 업로드하려면 어떻게해야하며 어떻게 다운로드합니까?

인수를 최소화하기 위해 시스템의 주요 구성 요소를 변경할 수없고 방화벽 및 관리 정책으로 인해 공유 네트워크 리소스를 사용하여 파일을 이동할 수 없다고 가정하십시오.

답변

1

업로드 된 파일을 모두 한꺼번에 scp'ing 할 필요가 없습니다. scp는 표준 입력에서 데이터를 가져올 수 있으며 파이썬에서는 하위 프로세스의 입력, 출력 및 오류 파이프를 정밀하게 제어 할 수 있습니다.

Pylons 부분에 대해서는 "Pylons으로 HTTP 업로드/다운로드 스트리밍하는 방법"을 읽을 수 있습니다.

Pylons 컨트롤러가 큰 파일을 제공하거나 파일 서버 앞에 프록시 역할을하는 스트리밍 다운로드는 쉽습니다. 이것에 대한 Pylons Wiki의 "Streaming Content to Browser"을 참조하십시오 (위키가 ATM을 사용하기 때문에 링크가 Google 캐시에 있음).

Pylons에서 스트리밍 업로드가 더 까다 롭습니다. 주된 문제는 다시 미들웨어의 버퍼입니다. Pylons 위키에는 "Hacking Pylons for handling large file upload"(google cache again)에 대한 기사가 있습니다.

관련 문제