javascript - 从 AWS S3 下载文件如何正确使用 JS
问题描述
我尝试从 AWS S3 下载文件,该文件下载成功,但它没有保存在我的磁盘中,并且我没有收到任何错误。
<script>
import AWS from 'aws-sdk';
import FS from 'browserify-fs';
export default {
computed: {
s3Client() {
// Enter copied or downloaded access ID and secret key here
const ID = 'RANDOM_ID';
const SECRET = 'RANDOM_SECRET';
return new AWS.S3({
accessKeyId: ID,
secretAccessKey: SECRET
})
}
},
methods: {
downloadFile() {
const BUCKET_NAME = 'js-bucket'
const FILE_NAME = 'test.epub'
const params = {
Key: FILE_NAME,
Bucket: BUCKET_NAME
}
console.info("Try to download file : " + FILE_NAME + " from bucket: " + BUCKET_NAME)
this.isDownloading = true
this.s3Client.getObject(params)
.promise()
.then(data => {
FS.writeFile(FILE_NAME, data.Body, function (err) {
if (err) {
console.log(err.code, "-", err.message);
}
})
console.log('File downloaded successfully')
})
.catch(err => console.error(err))
}
}
}
</script>
在控制台中,我看到有关成功保存的消息:文件已成功下载。但这是不对的。
解决方案
我自己决定的:
.promise()
.then(data => {
const blob = new Blob([data])
const link = document.createElement('a')
link.href = URL.createObjectURL(blob)
link.download = FILE_NAME
link.click()
URL.revokeObjectURL(link.href)
console.log('File downloaded successfully')
})
它有效,但如果有人知道如何做得更好,请回答。
推荐阅读
- http - 可以在 TCP 打孔后打开的端口上托管 HTTP/HTTPS 服务器吗?
- datepicker - Vuetify 1.5 多个日期 datepicker 显示空白日期与 MM/DD/YYYY 时刻格式化日期
- flutter - 什么时候在颤动中处理一个集团?
- php - 如何在php中访问foreach循环之外的多个变量
- reactjs - 将 e.currentTarget.value 放入具有常量类型的 Typescript 变量中
- r - 通过 r 中的嵌套列表进行操作
- linux - 为什么 GNU Stow 不忽略主目录中的单个文件?
- sql - 如何提高 WordPress 元查询速度?
- python - 两个 PCAN 适配器连接到同一台笔记本电脑的两个 USB 端口
- java - Java Swing 嵌套 JTable