如何使用meteorjs,AWS s3和Angularjs下载大文件?

时间:2018-07-23 22:54:22

标签: angularjs node.js meteor amazon-s3 download

我对AWS和MeteorJ还是很陌生,在下载大文件(大于100mb)时遇到问题。我希望用户单击下载按钮,然后立即开始下载文件。我可能是错的,但是代码看起来像是将文件下载到内存中,然后将其发送到客户端。

编辑:问题有点不同。我不是通过http调用服务器功能。我已将呼叫添加到服务器。

这是到服务器的呼叫:

function getFile(data) {
    const def = $q.defer();

    Meteor.call('downloadFileFromS3', data, (err, res) => {
        if (err) {
            return def.reject(err)
        }

        return def.resolve(res)
    });

    return def.promise;
};

这是meteorjs代码:

async downloadFileFromS3(params) {
    try {
        const criteria = {
            Bucket: params.bucket,
            Key: `${params.key}/${params.filename}`
        };

        const data = await s3.getObject(criteria).promise();

        return {
            data: data.Body,
            contentType: data.ContentType,
            filename: params.filename
        };
    } catch (ex) {
        throw new Meteor.Error('500', ex.message);
    }
}

这是我在客户端执行的操作:

function _download (data, filename) {
    const blob = new Blob([data.data], {type: data.contentType});

    const url = window.URL.createObjectURL(data);
    const el = document.createElement('a');

    el.style = 'display: none';
    el.href = url;
    el.download = filename;

    document.body.appendChild(el);

    el.click();

    window.URL.revokeObjectURL(url);
}

0 个答案:

没有答案