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 が失敗する理由を理解するのに役立ちません。