Saltar al contenido

¿Cómo cargar un archivo de datos en la memoria al almacenamiento en la nube de Google usando nodejs?

Solución:

Los datos se pueden cargar sin escribir en un archivo mediante el uso de secuencias de nodos.

const stream     = require('stream'),
      dataStream = new stream.PassThrough(),
      gcFile     = cloudStorage.bucket(bucketName).file(fileName)

dataStream.push('content-to-upload')
dataStream.push(null)

await new Promise((resolve, reject) => {
  dataStream.pipe(gcFile.createWriteStream({
    resumable  : false,
    validation : false,
    metadata   : {'Cache-Control': 'public, max-age=31536000'}
  }))
  .on('error', (error : Error) => { 
    reject(error) 
  })
  .on('finish', () => { 
    resolve(true)
  })
})

Sí, es posible recuperar una imagen de una URL, realizar ediciones en la imagen y subirla a Google Cloud Storage (o Firebase Storage) usando nodejs, sin tener que guardar el archivo localmente.

Esto se basa en la respuesta de Akash con una función completa que funcionó para mí, incluido el paso de manipulación de imágenes.

Pasos

  • Utilice axios para recuperar una secuencia de la imagen desde una URL remota.
  • Utilice nítido para realizar cambios en la imagen.
  • Utilice la biblioteca de Google Cloud Storage para crear un archivo y guarde los datos de la imagen en el archivo en Google Cloud Storage. (más documentos de nodo)

Si eres un base de fuego usuario que usa firebase storage, aún debe usar esta biblioteca. La implementación de firebase web para almacenamiento no funciona en node. Si creó su almacenamiento en firebase, aún puede acceder a todo esto a través de Google Cloud Storage Console. Ellos son la misma cosa.

const axios = require('axios');
const sharp = require('sharp');
const { Storage } = require('@google-cloud/storage');

const processImage = (imageUrl) => {
    return new Promise((resolve, reject) => {

        // Your Google Cloud Platform project ID
        const projectId = '<project-id>';

        // Creates a client
        const storage = new Storage({
            projectId: projectId,
        });

        // Configure axios to receive a response type of stream, and get a readableStream of the image from the specified URL
        axios({
            method:'get',
            url: imageUrl,
            responseType:'stream'
        })
        .then((response) => {

            // Create the image manipulation function
            var transformer = sharp()
            .resize(300)
            .jpeg();

            gcFile = storage.bucket('<bucket-path>').file('my-file.jpg')

            // Pipe the axios response data through the image transformer and to Google Cloud
            response.data
            .pipe(transformer)
            .pipe(gcFile.createWriteStream({
                resumable  : false,
                validation : false,
                contentType: "auto",
                metadata   : {
                    'Cache-Control': 'public, max-age=31536000'}
            }))
            .on('error', (error) => { 
                reject(error) 
            })
            .on('finish', () => { 
                resolve(true)
            });
        })
        .catch(err => {
            reject("Image transfer error. ", err);
        });
    })
}

processImage("<url-to-image>")
.then(res => {
  console.log("Complete.", res);
})
.catch(err => {
  console.log("Error", err);
});
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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