如何使AWS S3上传可重用的功能并在我选择的任何文件中使用来自AWS的回调?

编程入门 行业动态 更新时间:2024-10-12 14:21:45

如何使AWS S3上传可重用的功能并<a href=https://www.elefans.com/category/jswz/34/1771369.html style=在我选择的任何文件中使用来自AWS的回调?"/>

如何使AWS S3上传可重用的功能并在我选择的任何文件中使用来自AWS的回调?

请考虑以下S3上传代码:

const Category = require('../models/category');
const Link = require('../models/link');
const slugify = require('slugify');
const uuidv4 = require('uuid/v4');
const AWS = require('aws-sdk');

// s3
const s3 = new AWS.S3({
  accessKeyId: process.env.AWS_ACCESS_KEY_ID,
  secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  region: process.env.AWS_REGION,
});

// Using BASE 64

exports.create = (req, res) => {
  const {image, name, content} = req.body;
   const base64Data = new Buffer.from(
    image.replace(/^data:image\/\w+;base64,/, ''),
    'base64'
  );
  const type = image.split(';')[0].split('/')[1]; // get the png from "data:image/png;base64,"

  // upload image to s3 (The params will be passed to the refactored code)
  const params = {
    Bucket: 'categories-react',
    Key: `category/${uuidv4()}.${type}`,
    Body: base64Data,
    ACL: 'public-read',
    ContentEncoding: 'base64',
    ContentType: `image/${type}`,
  };


  s3.upload(params, (err, data) => {
    if (err) {
      console.log(err);
      res.status(400).json({error: 'Upload to s3 failed'});
    }


    // ... more logic 


    return res.json(success : '....');

  });
};

我想将AWS上传代码导出到其他文件,并在不重复相同代码的情况下将其传递给参数,重构代码:

/**
 * Upload image to S3
 */
const AWS = require('aws-sdk');

const uploadImageToS3 = (params) => {
  const s3 = new AWS.S3({
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
    region: process.env.AWS_REGION,
  });

  // ... handle the upload

  s3.upload(params, (err, data) => {
    if (err) {
      console.log(err);
      res.status(400).json({error: 'Upload to s3 failed'});
    }

    // else handle the data ...

  });
};

export {uploadImageToS3 as default};

但是如何在任何文件中使用S3中的回调函数将使用S3的重构代码?

回答如下:

您必须接受回调作为此函数的参数。

作为建议,而不是回调,请尝试使用Promise API:

s3.upload(params).promise().then(data => {}).catch(err => {})

您将能够从您的函数中返回一个承诺,然后再进行后续操作/稍后捕获。

更多推荐

如何使AWS S3上传可重用的功能并在我选择的任何文件中使用来自AWS的回调?

本文发布于:2024-05-07 09:53:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1755698.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:在我   回调   上传   功能   文件

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!