2

フォルダ「投稿」を作成するにはどうすればよいですか?Firebaseクラウドファンクションを使用してフォルダを作成する方法

bucket --> gs://app.appspot.com/posts

コード

exports.generateThumbnail = functions.storage.object() 
    .onChange(event => { 
    const object = event.data 
    const filePath = object.name 
    const fileName = filePath.split('/').pop() 
    const fileBucket = object.bucket; 
    const bucket = gcs.bucket(fileBucket) 
    const tempFilePath = `/posts/${fileName}` 

    return bucket.file(filePath).download({ 
     destination: tempFilePath 
    }) 
    .then(() => { 
     console.log('image downloaded locally to', tempFilePath) 
     return spawn('convert', [tempFilePath, '-thumbnail', '400x400>', tempFilePath]) 
    }) 
    .then(() => { 
     console.log('thumbnail created') 
     // match end of string that contains a slash followed by 0 or more characters that are not a slash: 
     const thumbFilePath = filePath.replace(/(\/)?([^\/]*)*/, '$1thumb_$2') 
      console.log('afoter=thumbFilePath=='+thumbFilePath); 
     return bucket.upload(tempFilePath, { 
     destination: thumbFilePath 
     }) 
    }) 

    }); 

エラー

Error: EROFS: read-only file system, open '/posts/image.jpg'?

答えて

9

クラウド機能/tmpディレクトリを除いて、読み取り専用のファイルシステムを持っています。 /postsディレクトリを/tmp/postsのようなものにして、ディレクトリを作成したり、書き込んだりする必要があります。また、node-tmpのようなものを使用して、一時ファイル/ディレクトリの作成をより簡単に管理することもできます。次のようなコード作業

+0

あなたは – aofdev

+0

うわー、私はちょうど雲の機能上のDBへの書き込みしようとして壁に頭を叩いた感謝をしてみてください。明らかにしていただきありがとうございます。どこにドキュメントに記載されているのかわかりません。 – AlxVallejo

+0

また、コードが移植性があることを確認するには、 "tmp"をハードコードしないでください。os.tmpdir()を使用してローカルの一時ディレクトリを取得し、path.join()を使用してサブパスを取得します。これにより、ノードモジュールがWindows上で動作するようになります。これは、ローカルエミュレータを使用してコードをテストする場合に便利です。 –

0

:私は

//add 3 package 
const path = require('path'); 
const os = require('os'); 
const fs = require('fs'); 


exports.generateThumbnail = functions.storage.object() 
    .onChange(event => { 

    const object = event.data; 
    const fileBucket = object.bucket; 
    const filePath = object.name; 
    const contentType = object.contentType; 
    const resourceState = object.resourceState; 
    const metageneration = object.metageneration; 

    const bucket = gcs.bucket(fileBucket); 
    const tempFilePath = path.join(os.tmpdir(), fileName); 
    return bucket.file(filePath).download({ 
    destination: tempFilePath 
    }).then(() => { 
    console.log('Image downloaded locally to', tempFilePath); 
    // Generate a thumbnail using ImageMagick. 
    return spawn('convert', [tempFilePath, '-thumbnail', '400x400>', tempFilePath]); 
    }).then(() => { 
    console.log('Thumbnail created at', tempFilePath); 
    // We add a 'thumb_' prefix to thumbnails file name. That's where we'll upload the thumbnail. 
    const thumbFileName = `thumb_${fileName}`; 
    const thumbFilePath = path.join(path.dirname(filePath), thumbFileName); 
    // Uploading the thumbnail. 
    return bucket.upload(tempFilePath, {destination: thumbFilePath}); 
    // Once the thumbnail has been uploaded delete the local file to free up disk space. 
    }).then(() => fs.unlinkSync(tempFilePath)); 

    }); 

Successful -> /tmp/posts -> gs://app.appspot.com/posts

関連する問題