在NodeJS中,如何从S3下载文件

用户名

在ExpressJS中,我想下载以前上传到Amazon S3存储桶的文件。

这是我目前的路线:

const express = require('express');
const AWS = require('aws-sdk');
const mammoth = require('mammoth');
const fs = require('fs').promises
const path = require('path')
const router = express.Router();

router.put('/:id/download', async (req, res, next) => {
  console.log('hitting download route')

  var id = req.params.id;
  let upload = await Upload.query().findById( id ).eager('user');

  console.log("file to download is: ", upload.name)

  AWS.config.update({
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  });

  const s3 = new AWS.S3();


  // var fileStream = fs.createWriteStream('/tmp/file.docx');
  // var s3Stream = s3.getObject(params).createReadStream();

  const downloadFromS3 = async () => {
    const params = {
      Bucket: process.env.AWS_BUCKET, 
      Key: upload.file_url.split("com/").reverse()[0]
    };
    const { Body } = await s3.getObject(params).promise()
    await fs.writeFile(`${ __dirname }/download.docx`, Body)

    return Body
  }


  // mammoth.convertToHtml({ path: '/Users/dariusgoore/Downloads/1585930968750.docx' })
  //   .then(async function(result) {
  //     await Upload.query().findById( id )
  //       .patch({
  //          html: result.value,
  //          conversion_messages: result.messages
  //       })  
  //     res.json(result);
  //   })

    // .done();

  res.send(downloadFromS3)
});

我没有收到任何错误,但是没有创建该文件,或者如果我手动创建该文件,它仍然为空。

拉兹基

如果我已正确理解您的问题,则问题是您没有等待将文件写入本地文件系统,而是通过express在响应中将其返回。

尝试一下此代码。

const express = require('express')
const AWS = require('aws-sdk')
const mammoth = require('mammoth')

const fs = require('fs').promises
const path = require('path')

const router = express.Router()

const s3 = new AWS.S3()

AWS.config.update({
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
})

const downloadFromS3 = async (key, location) => {
    const params = {
        Bucket: process.env.AWS_BUCKET,
        Key: key,
    }

    const { Body } = await s3.getObject(params).promise()
    await fs.writeFile(location, Body)

    return true
}

router.put('/:id/download', async (req, res, next) => {
    console.log('hitting download route')

    const upload = await Upload.query()
        .findById(req.params.id)
        .eager('user')

    console.log('file to download is: ', upload.name)

    const key = upload.file_url.split('com/').reverse()[0]

    const location = `${__dirname}/${key}.docx`

    await downloadFromS3(key, location)

    res.send({ key, location })
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Boto3:从S3下载文件

来自分类Dev

使用Laravel从Amazon S3下载文件

来自分类Dev

如何生成安全的临时URL以从Amazon S3下载文件?

来自分类Dev

仅当远程文件比本地副本新时,才如何使用Boto从S3下载文件?

来自分类Dev

如何在不使用AWS CLI的情况下使用S3专用存储桶下载文件

来自分类Dev

从S3下载文件> 3Gb失败,并显示“ SocketTimeoutException:读取超时”

来自分类Dev

模拟boto3响应,用于从S3下载文件

来自分类Dev

使用PHP从Amazon S3下载文件后继续执行

来自分类Dev

通过Carrierwave和Fog从Amazon S3下载文件

来自分类Dev

通过代理服务器使用Boto从s3下载文件

来自分类Dev

从Internet下载文件到S3存储桶

来自分类Dev

使用PHP从Amazon s3压缩并下载文件

来自分类Dev

如何在Python中使用临时令牌从s3存储桶下载文件

来自分类Dev

如何使用wget从S3存储桶下载文件?

来自分类Dev

如何使用urllib3下载文件?

来自分类Dev

如何使用Boto3创建预签名URL以从S3存储桶下载文件?

来自分类Dev

无法从以pyspark内核运行的emr笔记本中的s3存储桶下载文件

来自分类Dev

如何将从S3下载的文件对象存储到本地目录

来自分类Dev

如何加快从AWS S3下载数百万个文件的速度

来自分类Dev

如何在不下载的情况下编辑S3 CSV文件?

来自分类Dev

如何将从S3下载的文件对象存储到本地目录

来自分类Dev

如何使用传输实用程序从s3下载特定版本的文件

来自分类Dev

通过php从s3下载大文件

来自分类Dev

从S3下载时Excel文件损坏

来自分类Dev

从AWS S3下载清单文件

来自分类Dev

迭代从S3下载的JSON文件

来自分类Dev

NodeJS如何从aws s3存储桶中将文件下载到磁盘?

来自分类Dev

在Android应用程序中从Amazon s3下载之前获取文件的大小

来自分类Dev

从S3存储桶+文件夹下载文件

Related 相关文章

  1. 1

    Boto3:从S3下载文件

  2. 2

    使用Laravel从Amazon S3下载文件

  3. 3

    如何生成安全的临时URL以从Amazon S3下载文件?

  4. 4

    仅当远程文件比本地副本新时,才如何使用Boto从S3下载文件?

  5. 5

    如何在不使用AWS CLI的情况下使用S3专用存储桶下载文件

  6. 6

    从S3下载文件> 3Gb失败,并显示“ SocketTimeoutException:读取超时”

  7. 7

    模拟boto3响应,用于从S3下载文件

  8. 8

    使用PHP从Amazon S3下载文件后继续执行

  9. 9

    通过Carrierwave和Fog从Amazon S3下载文件

  10. 10

    通过代理服务器使用Boto从s3下载文件

  11. 11

    从Internet下载文件到S3存储桶

  12. 12

    使用PHP从Amazon s3压缩并下载文件

  13. 13

    如何在Python中使用临时令牌从s3存储桶下载文件

  14. 14

    如何使用wget从S3存储桶下载文件?

  15. 15

    如何使用urllib3下载文件?

  16. 16

    如何使用Boto3创建预签名URL以从S3存储桶下载文件?

  17. 17

    无法从以pyspark内核运行的emr笔记本中的s3存储桶下载文件

  18. 18

    如何将从S3下载的文件对象存储到本地目录

  19. 19

    如何加快从AWS S3下载数百万个文件的速度

  20. 20

    如何在不下载的情况下编辑S3 CSV文件?

  21. 21

    如何将从S3下载的文件对象存储到本地目录

  22. 22

    如何使用传输实用程序从s3下载特定版本的文件

  23. 23

    通过php从s3下载大文件

  24. 24

    从S3下载时Excel文件损坏

  25. 25

    从AWS S3下载清单文件

  26. 26

    迭代从S3下载的JSON文件

  27. 27

    NodeJS如何从aws s3存储桶中将文件下载到磁盘?

  28. 28

    在Android应用程序中从Amazon s3下载之前获取文件的大小

  29. 29

    从S3存储桶+文件夹下载文件

热门标签

归档