2017-07-06 1 views
2

Je suis en train de lire une image d'un URL et de la traiter. J'ai besoin de télécharger ces données vers un fichier dans le stockage en nuage, actuellement je suis en train d'écrire les données dans un fichier et de télécharger ce fichier, puis de supprimer ce fichier. Est-il possible de télécharger les données directement dans le cloud?Comment télécharger des données de fichier en mémoire sur le stockage google cloud en utilisant nodejs?

static async uploadDataToCloudStorage(rc : RunContextServer, bucket : string, path : string, data : any, mimeVal : string | false) : Promise<string> { 
if(!mimeVal) return '' 

const extension = mime.extension(mimeVal), 
     filename = await this.getFileName(rc, bucket, extension, path), 
     modPath = (path) ? (path + '/') : '', 
     res  = await fs.writeFileSync(`/tmp/${filename}.${extension}`, data, 'binary'), 
     fileUrl = await this.upload(rc, bucket, 
          `/tmp/${filename}.${extension}`, 
          `${modPath}${filename}.${extension}`) 

await fs.unlinkSync(`/tmp/${filename}.${extension}`) 

return fileUrl 
} 

static async upload(rc : RunContextServer, bucketName: string, filePath : string, destination : string) : Promise<string> { 
const bucket : any = cloudStorage.bucket(bucketName), 
     data : any = await bucket.upload(filePath, {destination}) 

return data[0].metadata.name 
} 
+0

Avez-vous trouvé un moyen de le faire? Je veux aussi faire la même chose avec les données JSON. – Peza

+0

J'ai posté la solution que j'ai utilisée, désolé pour le retard. –

Répondre

0

Les données peuvent être téléchargées sans écrire dans un fichier en utilisant des flux de nœuds.

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) 
    }) 
})