最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

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

IT培训 admin 12浏览 0评论

如何使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的回调?

请考虑以下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 => {})

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

发布评论

评论列表 (0)

  1. 暂无评论