我对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);
}