0

ExpressJS Web アプリで gcloud-node の使用を開始したばかりで、非常に基本的な問題と思われる問題に遭遇しましたが、理解できません。

問題なくファイルをアップロードできます。私が使う:

fs.createReadStream(req.files.file.path)
    .pipe(bucket.createWriteStream(name))

Google 開発者コンソールを見ると、バケットに次のような名前のファイルが表示されます。

その名前を使用してダウンロードしようとすると、つまり:

bucket.createReadStream(file.name)
            .pipe(res)
             .on('error', function(err) {
                    errorResponseHandler.handleError(res, err);
                });

次のエラーが表示されます。

uncaughtException: Not Found Error: Not Found at Object.handleResp (/Users/ruairiobrien/Dev/testApp/node_modules/gcloud/lib/common/util.js:168:14) at Bucket.makeReq_ (/Users/ruairiobrien/Dev/testApp/node_modules/gcloud/lib/storage/index.js:580:10) at Request.Connection.req [as _callback] (/Users/ruairiobrien/Dev/testApp/node_modules/gcloud/lib/common/connection.js:251:16) at Request.init.self.callback (/Users/ruairiobrien/Dev/testApp/node_modules/gcloud/node_modules/request/request.js:199:22) at Request.emit (events.js:98:17) at Request.onResponse (/Users/ruairiobrien/Dev/testApp/node_modules/gcloud/node_modules/request/request.js:1160:14) at Request.emit (events.js:117:20) at IncomingMessage.Request.onResponse.strings (/Users/ruairiobrien/Dev/testApp/node_modules/gcloud/node_modules/request/request.js:1111:12) at IncomingMessage.emit (events.js:117:20) at _stream_readable.js:929:16 デバッグを行いましたが、正しい名前のファイルがバケットに存在することは確かです。

私はこれに本当に困惑しているので、どんな助けでも大歓迎です。

応答ではなく、ローカルファイルシステムにもファイルを書き込もうとしましたが、同じエラーが発生しました。

機能している一時的な (または永続的な) 回避策は次のとおりです。

bucket.getSignedUrl({
                action: 'read',
                expires: Math.round(Date.now() / 1000) + (60 * 60 * 24), // 1 day.
                resource: file.name
            }, function (err, url) {
                res.redirect(url);

            });

回避策は正常に機能しますが、ファイル名とバケットが正しいことが示されているため、createReadStream が失敗する理由を理解するのに役立ちません。

4

1 に答える 1

1

の古いバージョンを使用している可能性がありますgcloud-node。最新バージョン (現在、v0.14.0) でアップロードとダウンロードを行う方法は次のとおりです。

var fs = require('fs');
var gcloud = require('gcloud');

var project = gcloud({
  projectId: 'your-project-id',
  // keyFilename: '/path/to/your/keyfile.json'
});

var bucket = project.storage().bucket('your-bucket-name');

var filename = 'local-file-name';
var file = bucket.file(filename); // This is a gcloud.File

var getFiles = function() {
  bucket.getFiles(function(err, files) {
    console.log('Files were', files);
  });
};

var createFile = function() {
  fs.createReadStream(filename)
    .pipe(file.createWriteStream())
    .on('error', function (err) {
      console.log('Error!', err);
    })
    .on('complete', function(result) {
      console.log('Complete!', result);
    });
};

var getFile = function() {
  file.createReadStream()
    .pipe(fs.createWriteStream(filename + '.downloaded'))
    .on('error', function(err) {
      console.log('Error downloading!', err);
    });
}

createFile();
getFile();

このスクリプトを実行するとlocal-file-name、バケット ( ) にファイル ( )がアップロードされ、your-bucket-nameそのファイルが としてダウンロードされますlocal-file-name.download)。

参照する参考資料 (これらの各ページに例があるはずです):

于 2015-05-10T14:51:24.580 に答える