Загрузить файл JSON в корзину aws s3 из aws-sdk в node.js - PullRequest
0 голосов
/ 26 ноября 2018

Я получаю массив объектов от стороннего API и хочу сохранить его данные в корзину S3 в файле JSON.Ниже приведены шаги, которых я хочу достичь

1> Создать новый файл JSON в корзине S3 У меня есть следующие данные:

var AWS = require('aws-sdk')
var express = require('express')
var multer = require('multer')
var multerS3 = require('multer-s3')
AWS.config.loadFromPath('./lib/configFile.json');
var s3 = new AWS.S3();
var data =  [
             {
              name: abc,
              address: xyz, def-12345
             },{
              name: fgh,
              address: cvb, def-09876
             },{
              name: jkl,
              address: nbm, def-34566
             }
            ]

Теперь я хочу загрузить эти данные в виде файла JSON вВедро S3. Есть ли способ загрузить эти данные в S3 без создания какого-либо временного файла json в пути и напрямую сохранить эти данные в S3.

2> Уже есть файл JSON на S3: скажем,У меня уже есть файл JSON в корзине S3, и я хочу обновить тот же файл. Итак, для этого есть ли какой-либо способ временно хранить данные JSON где-нибудь и обновлять этот файл.

Каков наилучший способ добиться этого?

1 Ответ

0 голосов
/ 04 декабря 2018

Я знаю, что уже поздно.Но мой комментарий может помочь другим.

Несколько дней назад даже у меня была такая же ситуация.У меня был объект javascript, который был огромен.Я искал решение.Затем я посмотрел здесь .

Я создал универсальную функцию для загрузки файла, который может быть буфером, данными base64 или JSON.

let data = {
  version: "2.3.4",
  objects: [{
    a: "imagas dae",
    verasdasdsion: "2.3.4",
    originX: "center",
    originY: "center"
  }],
  background: "#232326",
  canvasWidth: 619,
  canvasHeight: 413
}
uploadFile(JSON.stringify(data), 'test.json').then(r=>{}).catch(e=>{})



function uploadFile(file, file_name, path = '/defualt') {
    return new Promise((resolve, reject) => {
        if (Buffer.isBuffer(file) || (file && Buffer.isBuffer(file.buffer)) || String(file_name).includes('.json') || file.indexOf('data:') === 0) {
            file = Buffer.isBuffer(file) ? file : String(file_name).includes('.json') ? file : file.indexOf('data:') === 0 ? new Buffer(img_src.replace(/^data:\w+\/\w+;base64,/, ""), 'base64') : file.buffer;
            var data = {
                Key: file_name,
                Body: file,
                Bucket: "path/to/your/bucket" + path,
                CacheControl: 'no-cache'
            };


            if (file.indexOf('data:') === 0) {
                data['ContentType'] = String(file).substr(file.indexOf('data:') + 'data:'.length, file.indexOf(';'))
            } else if (String(file_name).includes('.json')) {
                data['ContentType'] = 'application/pdf';
            }

            s3.putObject(data, function (err, data) {
                if (err) {
                    console.log('Error uploading data: ', err);
                    return reject(err);
                } else {
                    return resolve({
                        name: file_name,
                        path: path
                    });
                }
            });
        } else {
            return reject('File is required');
        }
    });
}
...