2013-06-13 5 views
1

OpenStack Swift (또는 다른 저장 시스템)에 일부 파일이 저장되어 있습니다. 사용자가 신속한 백엔드에서 해당 파일을 다운로드 할 수 그리고 내 장고 응용 프로그램이 브라우저 기반 GUI를 제공합니다 내가 정적 파일을 테스트 한django 파일 다운로드 문제

(1) Each file will have a URL such as: http://domain.com/files/file1 
(2) User could use browser or any other client program based on HTTP to download files. 

로 다운로드 :

def download(request): 
    try: 
     #TODO 
     file_name = 'E:/sample.docx' 
     fsock = open(file_name,"r") 
     mime_type_guess = mimetypes.guess_type(file_name) 
     if mime_type_guess is not None: 
      response = HttpResponse(fsock, mimetype=mime_type_guess[0]) 
     response['Content-Length'] = os.path.getsize(file_name)   
     response['Content-Disposition'] = 'attachment; filename=' + file_name       
    except IOError: 
     response = HttpResponseNotFound() 
    return response 

내 질문

은 다음과 같습니다

(1) 다운로드보기에서 파일을 다운로드 할 수 있지만 다운로드 한 파일 크기는 항상 1k입니다. 여기서 뭐가 문제 야?

(2) OpenStack Swift와 같은 다른 Object Storage 백엔드에 저장된 동적 파일 다운로드를 처리하는 방법에 대한 단서가 아직 없습니다.

답변

1

먼저 Swift Storage에서 업로드 된 파일은 개체와 같습니다. 개체 저장소의 파일 경로를 지정할 수 없습니다.

둘째, python-swiftclient를 사용하여 업로드 된 개체 (파일)를 다운로드 할 수 있습니다. 샘플 코드는 여기에 있습니다.

def download(request): 
     #Get object(file) using swiftclient 
     url = str(request.values['url']) 
     token = str(request.values['token']) 
     container = str(request.values['container']) 
     name = str(request.values['name']) 
     header, data = Client.get_object(url, token, container, object_name) 

     #Send object data to browser 
     result = data 
     response = Response(result) 
     response.headers['Content-Type'] = content['header']['content-type'] 
     response.headers['Content-Disposition'] = 'attachment; filename="'+filename+'"' 
     return response 

희망이 도움이 될 것입니다. 자세한 내용은 http://docs.openstack.org/developer/python-swiftclient/swiftclient.html#swiftclient.client.get_object

을 참조하십시오.