Estoy creando una aplicación web en la que necesito permitir que los usuarios carguen documentos en su cuenta y también leer todos los documentos que han cargado. Además, me gustaría permitir que los usuarios también puedan cargar una foto de perfil. Para manejar el almacenamiento de archivos, elegí AWS S3.
Sin embargo, tengo muchos problemas con el SDK (v3). Tenga en cuenta que nunca usé la versión anterior (v2). Instalé 2 paquetes a través de npm, @aws-sdk/client-s3 y @aws-sdk/s3-request-presigner . Tengo problemas para encontrar la documentación adecuada para todas las funciones que necesito. Los documentos con los que me he encontrado no son exactamente aptos para principiantes y no entran en muchos detalles al explicar todas las funciones. Por ejemplo, en el caso de GetObjectCommand , puedo obtener una respuesta, pero no estoy seguro de cómo acceder realmente al cuerpo y usar los contenidos.
Tampoco estoy seguro de si debería usar GetObjectCommand o getSignedUrl para mi caso de uso. Por contexto, estoy usando Express para construir mi servidor.
Mis preguntas -
getSignedUrl sobre GetObjectCommand para leer y luego procesar archivos almacenados para una aplicación web?Estaré extremadamente agradecido por cualquier y toda ayuda.
Aquí hay un código para GetObjectCommand usando getSignedUrl (también actualicé el documento).
const { S3, CreateBucketCommand, PutObjectCommand, GetObjectCommand, DeleteObjectCommand, DeleteBucketCommand, } = require("@aws-sdk/client-s3"); const { getSignedUrl } = require("@aws-sdk/s3-request-presigner"); const fetch = require("node-fetch"); // Set parameters // Create random names for the Amazon Simple Storage Service (Amazon S3) bucket and key. const params = { Bucket: `test-bucket-${Math.ceil(Math.random() * 10 ** 10)}`, Key: `test-object-${Math.ceil(Math.random() * 10 ** 10)}`, Body: "BODY", Region: "REGION" }; // Create an Amazon S3 client object. const s3Client = new S3({ region: params.Region }); const run = async () => { // Create an Amazon S3 bucket. try { console.log(`Creating bucket ${params.Bucket}`); const data = await s3Client.send( new CreateBucketCommand({ Bucket: params.Bucket }) ); console.log(`Waiting for "${params.Bucket}" bucket creation...\n`); } catch (err) { console.log("Error creating bucket", err); } // Put the object in the Amazon S3 bucket. try { console.log(`Putting object "${params.Key}" in bucket`); const data = await s3Client.send( new PutObjectCommand({ Bucket: params.Bucket, Key: params.Key, Body: params.Body, }) ); } catch (err) { console.log("Error putting object", err); } // Create a presigned URL. try { // Create the command. const command = new GetObjectCommand(params); // Create the presigned URL. const signedUrl = await getSignedUrl(s3Client, command, { expiresIn: 3600, }); console.log( `\nGetting "${params.Key}" using signedUrl with body "${params.Body}" in v3` ); console.log(signedUrl); const response = await fetch(signedUrl); console.log( `\nResponse returned by signed URL: ${await response.text()}\n` ); } catch (err) { console.log("Error creating presigned URL", err); } }; run();