当我从Firebase Cloud Functions(Google Cloud Functions)向Firebase Storage(Google Cloud Storage)上传文件时,我试图获得永久下载URL。
我尝试将predefinedacl
设置为authenticatedread
和publicread
。当我的应用程序试图下载这些文件时,这两个错误都导致了403(禁止)
错误。这来自CreateWriteStreamOptions的文档。代码如下:
const {Storage} = require('@google-cloud/storage');
const storage = new Storage({ projectId: 'languagetwo-cd94d' });
const myBucket = storage.bucket('languagetwo-cd94d.appspot.com');
var mp3Promise = new Promise(function(resolve, reject) {
let options = {
metadata: {
contentType: 'audio/mp3',
public: true
}
};
synthesizeParams.accept = 'audio/mp3';
var file = myBucket.file('Audio/' + longLanguage + '/' + pronunciation + '/' + word + '.mp3');
textToSpeech.synthesize(synthesizeParams)
.then(function(audio) {
audio.pipe(file.createWriteStream(options));
})
.then(function() {
resolve('http://storage.googleapis.com/languagetwo-cd94d.appspot.com/Audio/' + longLanguage + '/' + pronunciation + '/' + word + '.mp3');
})
.catch(error => console.error(error));
});
http://storage.googleapis.com/languagetwo-cd94d.appspot.com/Audio/English/United_States-Allison-Female-IBM/catbirds.mp3
我得到这个错误:
<Error>
<Code>AccessDenied</Code>
<Message>Access denied.</Message>
<Details>
Anonymous caller does not have storage.objects.get access to languagetwo-cd94d.appspot.com/Audio/English/United_States-Allison-Female-IBM/catbirds.mp3.
</Details>
</Error>
从我的应用程序下载文件(作为授权用户),我会得到403(禁止)
错误消息。
我也尝试了这个属性,得到了相同的结果:
let options = {
metadata: {
contentType: 'audio/webm',
predefinedAcl: 'publicRead'
}
};
const {Storage} = require('@google-cloud/storage');
const storage = new Storage({ projectId: 'languagetwo-cd94d' });
const myBucket = storage.bucket('languagetwo-cd94d.appspot.com');
var mp3Promise = new Promise(function(resolve, reject) {
let options = {
metadata: {
contentType: 'audio/mp3'
}
};
synthesizeParams.accept = 'audio/mp3';
var file = myBucket.file('Audio/' + longLanguage + '/' + pronunciation + '/' + word + '.mp3');
textToSpeech.synthesize(synthesizeParams)
.then(function(audio) {
audio.pipe(file.createWriteStream(options));
})
.then(function() {
file.makePublic()
.then(function(data) {
console.log(data)
resolve('http://storage.googleapis.com/languagetwo-cd94d.appspot.com/Audio/' + longLanguage + '/' + pronunciation + '/' + word + '.mp3');
})
.catch(error => console.error(error));
})
.catch(error => console.error(error));
});
{ Error: No such object: languagetwo-cd94d.appspot.com/Audio/English/United_States-Allison-Female-IBM/warblers.mp3
我在云存储浏览器上找到了warblers.mp3
的权限:
第一个错误是由于对bucket的访问权限,在链接中可以找到标识和访问管理(IAM)说明,在那里可以检查角色和权限来管理bucket访问。
第二个错误可能是第一个错误的后果。
如果这些信息对你有用,请让我知道。
我在谷歌云存储上有两个文件:a.wav和b.txt 我想在我的浏览器中播放a.opus,它工作正常。我想读b.txt Google文档告诉我们,如果用户在浏览器中通过了身份验证,他就可以从bucket下载对象。 这将获得一个.wav并播放它。没问题。 现在阅读b.txt,我使用jquery ajax 但这给了我一个错误,控制台中打印了以下内容: CORS策略阻止从源url在https://stor
我注意到谷歌云存储没有提供任何移动SDK,所以我们可以用来与存储通信,那么我们需要创建自定义API来进行通信吗?我看到有一种方法可以在现有的Firebase项目中添加额外的桶,这会在Firebase中起作用吗?或者我们有没有一种方法可以将Firebase bucket添加到谷歌云存储中?
我已经为google cloud compute engine平台启用了使用导出设置,并为目标存储设置了桶。 已经快27个小时了,但报告说它不在桶里。 我读过这份文件,并遵循了完全相同的步骤。 桶的存储类重要吗?我有coldline存储类桶。
谷歌云存储中的文件更改需要多长时间才能传播? 我遇到了一个非常令人沮丧的问题,我改变了一个文件的内容,并通过gsutil重新上传,但是这个改变几个小时后才显示出来。有没有办法强制一个改变的文件立即传播所有内容? 如果我查看谷歌云存储控制台中的文件,它会看到新文件,但如果我点击公共网址,它是旧版本,在某些情况下,是2个版本前的版本。 有没有我没有设置的标题? 编辑: 我尝试了,但它没有帮助,但也许旧
我在我创建的谷歌云存储上有一个存储桶。我想测试一些内置ACL,如public read、public read write等。但是,一旦我使用gsutil setacl命令更改了ACL,例如:
因此,我正在查看来自Google的示例代码,但我无法确定如何激活配置文件? https://cloud.google.com/appengine/docs/flexible/nodejs/using-cloud-storage 示例代码: 但是,当您阅读https://github.com/googleCloudplatform/google-cloud-node/blob/master/docs