• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
Twitter Linkedin Instagram

S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
Twitter Linkedin Instagram
#Node.js  ·  #SAPonAWS  ·  amazon web services (aws)  ·  SAP BTP Object Store  ·  Technical Articles

Cargue y descargue objetos en SAP BTP Object Store en AWS con NodeJS

By s4pcademy 


en el tutorial Crear servicio de almacenamiento de objetos de consumo de aplicaciones de varias nubes , el método que consume el servicio de almacenamiento de objetos en AWS con Java se ha presentado en detalle . En portal de ayuda

también se ha introducido el método en Java.

en el blog Conexión al almacén de objetos BTP de SAP que se ejecuta en la plataforma Microsoft Azure mediante NodeJS

Ujala Kumar Panda ha introducido el uso de nodejs para consumir BTP Object Store en Azure.

Hoy quiero presentar el método con nodjs en una aplicación MTA. usaré Cliente S3: SDK de AWS para JavaScript v3 para consumir el servicio.

Requisito previo:

1, has instalado Cliente CF .

2, has instalado Nodejs .

3, has instalado Herramienta de creación de MTA en la nube .

4, has instalado Código VSC (Opcional).

Pasos :

Paso 1: configurar el almacén de objetos para usar Amazon Simple Storage Service.

Puede seguir el documento en ayudar. Las siguientes son las capturas de pantalla:

Como resultado, encontrará la información de la credencial y la anotará.

Paso 2: Generar proyecto SAPUI5 con generador-safanaacademy-mta

Abre la aplicación con código visual.

Paso 3: agregue el paquete aws-sdk y formidable en package.json en srv.

Paso 4: cambie server.js en srv de la siguiente manera

Las siguientes constantes son de la credencial del paso 1.

const regionV = “eu-central-1”;

const endPointV = “s3-eu-central-1.amazonaws.com”;

const accessKeyIdV = “AKIA5PG4D”;

const secretAccessKeyV = “2cj70kOURiRIYZGQfrxZ”;

const cuboV = «hcp-6d995ea54163b1be»;

const express = require('express');
const app = express();
const fs = require('fs');
const bodyParser = require('body-parser');
const formidable = require('formidable');
const { S3Client, PutObjectCommand, ListObjectsCommand, GetObjectCommand } = require("@aws-sdk/client-s3");

const regionV = "eu-central-1";
const endPointV = "s3-eu-central-1.amazonaws.com";
const accessKeyIdV = "AKIA5PG";
const secretAccessKeyV = "2cj70kGQfrxZ";
const bucketV = "hcp-61ea54163b1be";

const xsenv = require('@sap/xsenv');
xsenv.loadEnv();
const services = xsenv.getServices({
    uaa: { tag: 'xsuaa' }
});


const xssec = require('@sap/xssec');
const passport = require('passport');
passport.use('JWT', new xssec.JWTStrategy(services.uaa));
app.use(passport.initialize());
app.use(passport.authenticate('JWT', {
    session: false
}));

function makeid(length) {
    var result="";
    var characters="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    var charactersLength = characters.length;
    for (var i = 0; i < length; i++) {
        result += characters.charAt(Math.floor(Math.random() * charactersLength));
    }
    return result;
}

app.use(bodyParser.json());
// app.use(bodyParser.urlencoded({ extended: true }));

app.get('/srv/s3', function (req, res) {
    if (req.authInfo.checkScope('$XSAPPNAME.User')) {
        const client = new S3Client({ region: regionV, endPoint: endPointV, credentials: { accessKeyId: accessKeyIdV, secretAccessKey: accessKeyIdV } });
        var keyid = makeid(5).concat(".txt");
        var content = makeid(5);

        const params =
        {
            Bucket: bucketV, // The name of the bucket. For example, 'sample_bucket_101'.
            Key: keyid, // The name of the object. For example, 'sample_upload.txt'.
            Body: content // The content of the object. For example, 'Hello world!".
        };
        const putCommand = new PutObjectCommand(params);
        client.send(putCommand).then(data => {
            res.status(200).send(data);
        }).catch(err => {
            res.status(500).send(err);
        });
    } else {
        res.status(403).send('Forbidden');
    }
});

app.post('/srv/s3/upload', function (req, res) {
    const form = new formidable.IncomingForm();
    const client = new S3Client({ region: regionV, endPoint: endPointV, credentials: { accessKeyId: accessKeyIdV, secretAccessKey: secretAccessKeyV } });
    const params =
    {
        Bucket: bucketV, // The name of the bucket. For example, 'sample_bucket_101'.
        Key: "",
        Body: ""
    };
    form.parse(req, function (err, fields, files) {

        if (err) {
            return res.status(400).json({ error: err.message });
        }
        const [firstFile] = Object.values(files);

        params.Key = firstFile.originalFilename;
        const file = fs.readFileSync(firstFile.filepath);
        params.Body = file;
        const putCommand = new PutObjectCommand(params);
        client.send(putCommand).then(data => {
            res.status(200).send(data);
        }).catch(err => {
            console.log(err);
            res.status(500).send(err);
        });
    });
});

app.post('/srv/s3/download', function (req, res) {
    const client = new S3Client({ region: regionV, endPoint: endPointV, credentials: { accessKeyId: accessKeyIdV, secretAccessKey: secretAccessKeyV } });
    var keyV = req.body.key;
    const params =
    {
        Bucket: bucketV,
        Key: keyV,
    };
    const getCommand = new GetObjectCommand(params);
    client.send(getCommand).then(data => {
        console.log(data);
        const chunks = []
        const stream = data.Body;
        stream.on('data', chunk => chunks.push(chunk));
        stream.once('end', () => res.status(200).send(chunks));
    }).catch(err => {
        console.log(err.message);
        res.status(500).send(err.message);
    });

});


app.get('/srv/s3/list', function (req, res) {
    if (req.authInfo.checkScope('$XSAPPNAME.User')) {
        const client = new S3Client({ region: regionV, endPoint: endPointV, credentials: { accessKeyId: accessKeyIdV, secretAccessKey: secretAccessKeyV } });

        const params =
        {
            Bucket: bucketV // The name of the bucket. For example, 'sample_bucket_101'.

        };
        const putCommand = new ListObjectsCommand(params);
        client.send(putCommand).then(data => {
            res.status(200).send(data);
        }).catch(err => {
            res.status(500).send(err);
        });
    } else {
        res.status(403).send('Forbidden');
    }
});

app.get('/srv', function (req, res) {
    if (req.authInfo.checkScope('$XSAPPNAME.User')) {
        res.status(200).send('objstore');
    } else {
        res.status(403).send('Forbidden');
    }
});

app.get('/srv/user', function (req, res) {
    if (req.authInfo.checkScope('$XSAPPNAME.User')) {
        res.status(200).json(req.user);
    } else {
        res.status(403).send('Forbidden');
    }
});

const port = process.env.PORT || 5001;
app.listen(port, function () {
    console.info('Listening on http://localhost:' + port);
});

Paso 5: Ajuste index.html en app/resources.

Paso 6: Cree e implemente el proyecto en la fundición de la nube BTP con el siguiente comando:

construir mbt

cf desplegar mta_archives\objstore_0.0.1.mtar

Paso 7: prueba con el navegador:

Paso 8: prueba con cartero con:

Puede obtener la información de oauth2 de la pantalla después de la implementación.

Con la información de oauth2 puede probar la función de descarga y carga.

¡El fin!

¡Gracias por tu tiempo!

¡Saludos!

Jacky Liu



Source link


AWSBTPCarguecondescargueNodeJSObjectobjetosSAPStore

Artículos relacionados


Technical Articles
日本語翻訳版:SAP Human Capital Management para SAP S/4HANA ahora disponible como parte del lanzamiento de SAP S/4HANA 2022
Event Information
Creación de aplicaciones de datos inteligentes basadas en SAP HANA Cloud: una demostración durante SAP TechEd 2022
docker  ·  git  ·  html  ·  javascript  ·  Personal Insights  ·  python  ·  sap press
SAP PRESS Rheinwerk Computing Series ahora disponible en inglés | Reseña del libro

Deja tu comentario Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

Disponibilidad general OP 2022: Flexibilidad organizativa en contabilidad financiera
Previo
Cómo mejorar la comunicación del proyecto con los contratistas y los participantes externos del proyecto
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.
Cookies Para que este sitio funcione adecuadamente, a veces instalamos en los dispositivos de los usuarios pequeños ficheros de datos, conocidos como cookies. La mayoría de los grandes sitios web también lo hacen.
Aceptar
Cambiar ajustes
Configuración de Cookie Box
Configuración de Cookie Box

Ajustes de privacidad

Decida qué cookies quiere permitir. Puede cambiar estos ajustes en cualquier momento. Sin embargo, esto puede hacer que algunas funciones dejen de estar disponibles. Para obtener información sobre eliminar las cookies, por favor consulte la función de ayuda de su navegador. Aprenda más sobre las cookies que usamos.

Con el deslizador, puede habilitar o deshabilitar los diferentes tipos de cookies:

  • Bloquear todas
  • Essentials
  • Funcionalidad
  • Análisis
  • Publicidad

Este sitio web hará:

Este sitio web no:

  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
  • Recuerde sus detalles de inicio de sesión
  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
Guardar y cerrar