2017-07-06 6 views
2

私はURLから画像を読み取り、処理しています。このデータをクラウドストレージ内のファイルにアップロードする必要があります。現在、ファイルにデータを書き込み、このファイルをアップロードしてからこのファイルを削除しています。データを直接クラウドストアにアップロードする方法はありますか?nodejsを使用してGoogleのクラウドストレージにメモリファイルデータをアップロードするにはどうすればよいですか?

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

あなたはそれを行う方法を見つけましたか? JSONデータでも同じことをしたいと思います。 – Peza

+0

私が使用した解決策を掲載しました。遅れて申し訳ありません。 –

答えて

0

ノードストリームを使用してファイルに書き込むことなくデータをアップロードできます。

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) 
    }) 
}) 
関連する問題