비동기 backend는 (비동기 S3 또는 blobstore와 같은) 위장한 업로드 방지 특별 한 주의를 기울여야 합니다. 실제 서버에 성공적으로 업로드 후 이러한 backend는 POST 데이터 및 업로드 된 파일을 식별 하는 파일 ID를 포함 하는 별도의 요청을 생성 해야 합니다 (blobstore 자동으로 blob 키를 보내고 비동기 S3 파일 및 버킷 이름을 보낼 것입니다). 여기에서 문제는 사용자가 수동으로 다른 사용자의 개인 파일의 ID와 일치 하는 요구를 생성할 수 있다 이다, 그래서 그의 개인 파일에, 너무 올려 주기 해 지금 가짜 이기 때문에 그 파일에 접근을 얻기. 이 비동기 backend를 방지 하기 위해 업로드에 두 번 사용 되는 파일 ID를 보장 해야 합니다. serve_file에 다시 떨어지는 공공 다운로드를 위한 완벽 한 솔루션 ()이 업로드 라는 uploadmodel의 인스턴스에 대 한 템플릿에서 다음과 같이 보이게 될 것 이다: 어떤 모델의 파일 필드에 저장 된 파일을 제공 하자:이 백엔드 일부 다른 백엔드에 업로드 개인 = True 또는 private = False를 기반으로 합니다. 예를 들어, 개인 파일 및 공용 파일에 대 한 아마존 s 3에 대 한 응용 프로그램 엔진 blobstore를 사용할 수 있는이 방법은: 여기, 우리는 표준 라이브러리에서 임시 파일을 사용 하 여 임시로 파일 만들기. 우리는 문맥 가공 업자로 그것을 사용 하 고 있다, 그래서 코드의 블록이 종료 된 후에 자동적으로 청소할 것 이다 (임시 파일을 삭제 하십시오). 그런 다음 스트리밍 모드에서 요청과 함께 GET 요청을 수행 하므로 전체 파일을 메모리에 다운로드 하려고 하지 않습니다. 대신 우리는 우리가 임시 파일에 저장 청크를 제공 합니다. 이 방법은 다운로드할 파일이 사용 가능한 메모리에 비해 큰 경우 문제가 발생 하지 않도록 방지 합니다 (사용자가 2 시간 풀 HD 동영상을 자신의 아바타 사진으로 설정 하려고 시도할 수 있는 경우는 절대 모릅니다). 또한 url읽어들이기 기능도 동일한 방식으로 작동 합니다. 이 뷰 조각은 파일 다운로드 처리기를 구현 하기 위한 도우미입니다. 유니코드 파일 이름을 올바르게 인코딩하는 표준이 있지만 여러 브라우저에 다른 프로토콜이 있습니다.

최신과 최고의 장 고 버전은 우리의 자식 저장소 (우리의 개정 제어 시스템)에 하나입니다. 이것은 들어오는 변경 사항을 시도 하 고 공식 릴리스 전에 버그를 식별할 수 있도록 하려는 숙련 된 사용자를 위한 것입니다. 이 쉘 명령을 사용 하 여, 그것은 Git가 필요 합니다: 기본 업로드 백엔드 단순히 수정 되지 않은 URL을 반환 합니다. 기본 다운로드 백엔드 청크 장 고를 통해 파일을 전송, 그래서 그것은 확실히 가장 효율적인 메커니즘이 아니지만, 그것은 메모리의 작은 양의 (큰 파일에 대 한 중요)를 사용 하 고 직접 파일 개체를 전달 보다 적은 리소스가 필요 합니다 응답. 기본 공용 다운로드 백 엔드는 단순히 None을 반환 합니다. 이 기본 구성은 실질적으로 모든 서버에서 작동 해야 하지만 가장 효율적인 솔루션은 아닙니다. 제발 장 고와 함께 제공 되는 backend-filetransfor 뭔가를 귀하의 솔루션을 더 잘 맞는 볼 수 보세요. 템플릿 필터로도 사용할 수 있는 public_download_url 함수는 백엔드에서 지 원하는 파일의 공개적으로 액세스할 수 있는 url을 반환 합니다. 그렇지 않으면 None이 반환 됩니다.

우리는 콘텐츠를 다운로드 한 후, 우리는 열린 파일의 시작을 추구 (그래서 우리는 처음부터 읽을 수 있습니다), 그리고 filefield 그것을 저장 말해. 이전 처럼 파일 이름을 지정 하는 데 동일한 논리를 사용 합니다. 표준 라이브러리의 url만회 함수는 정적 파일을 다운로드 해야 하 고 요청에 재미 있는 작업을 할 필요가 없는 경우에 유용 합니다.