【问题标题】:Downloading an archive created with mongodump下载使用 mongodump 创建的存档
【发布时间】:2017-02-16 13:12:05
【问题描述】:

我正在尝试使用 mongodump 命令从服务器远程(即通过浏览器)下载 Mongo 转储。

后端是一个 Flask 服务器,是这样的:

@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

前端使用AngularJs,看起来像这样:

    $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);
    }

存档在服务器端正确创建,但我无法将其发送到客户端。发送请求时,会打开一个新选项卡以下载以 guid 命名的文件,而不是“db.gz”,并且该文件无法使用任何存档客户端打开,因此我在发送它或保存它。

非常感谢任何帮助。

【问题讨论】:

  • 我认为这里的问题是您使用的是open('db.gz', 'r').read(),它以文本模式(默认)读取您的 GZ,您应该以二进制格式读取它以保留其中的数据。因此,请尝试在您的原始代码上使用rb,而不是r,看看它是否有效。这是open 标志的表格:docs.python.org/3/library/functions.html#open

标签: python angularjs flask download mongodump


【解决方案1】:

所以我这样做了:

@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

在客户端我有:

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

其中 saveAs 来自 here 的 Filesaver.js

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    相关资源
    最近更新 更多