2017-02-16 3 views
3

mongodump 명령을 사용하여 서버에서 Mongo 덤프를 원격으로 다운로드하려고합니다.mongodump로 만든 아카이브 다운로드

백엔드는 플라스크 서버이며,이 같다 :

프론트 엔드는 AngularJS와를 사용하며 다음과 같습니다

@api.route('/export', methods=['GET']) 
def exportDb(): 
    subprocess.check_output(['mongodump','--archive=db.gz', '--gzip', '--db', 'my_db']) 
    response = make_response(open('db.gz', 'r').read()) 
    response.headers["Content-Disposition"] = "attachment; filename=db.gz" 
    return response 
:

아카이브는 서버 측에서 제대로 만들어,하지만 난되어
$http({ 
     method: 'GET', 
     url: '/intro/export' 
    }).then(function(response) { 
     var blob = new Blob([response.data], {type: 'application/zip, application/octet-stream'}); 
     var objectUrl = URL.createObjectURL(blob); 
     window.open(objectUrl); 
    } 

클라이언트로 전송할 수 없습니다. 요청이 전송되면 "db.gz"가 아닌 guid의 이름을 가진 파일을 다운로드 할 수있는 새 탭이 열리 며 그 파일을 보관 클라이언트로 열 수 없으므로 전송할 때 또는 놓쳤을 것입니다. 그것을 저장합니다.

도움이 될 것입니다.

+1

here에서 Filesaver.js에서입니다

$http({ method: 'GET', url: '/intro/exportDB', responseType: 'blob' }).then(function(response) { var data = new Blob([response.data]); saveAs(data, "db.gz"); } 

내가 여기 문제를 생각한다 텍스트 모드 (기본값)에서 GZ를 읽는'open ('db.gz', 'r'). read()'을 사용하고 있다는 것입니다. 따라서'r' 대신'rb'를 사용하여 원래 코드에서 작동하는지 확인하십시오. 다음은 'open' 플래그에 대한 표입니다. https://docs.python.org/3/library/functions.html#open –

답변

2

그래서 나는 이런 식으로 일을했습니다

클라이언트 측에
@api.route('/exportDB', methods=['GET']) 
def exportDB(): 
    subprocess.check_output(['mongodump','--archive=db.gz', '--gzip', '--db', 'my_db']) 
    response = send_from_directory("path/to/folder", 'db.gz', as_attachment=True) 
    response.headers["Content-Type"] = "application/javascript" 
    return response 

내가 가진 : 다른 이름으로 저장이