我正在做一个使用谷歌云存储的项目,允许用户使用Node.js将媒体文件上传到预定义的桶中。我一直在用小的.jpg
文件进行测试。我还使用gsutil
将bucket权限设置为public。
起初,所有文件都生成下载该文件的链接。通过对文档的研究,我了解到可以在上传后使用gsutil
CLI显式设置每个文件的content-type
。当我使用此过程将文件类型设置为'image/jpeg'
时,链接行为更改为在浏览器中显示图像。但是,只有在使用gsutil
更新元数据之前没有单击该链接时,这种方法才会起作用。我认为这可能是由于浏览器缓存造成的,但这种行为在一个隐姓埋名的浏览器中被复制了。
使用gsutil
设置mime类型无论如何都是不切实际的,因此我修改了节点服务器post
函数中的代码,以便在上传时使用名为mime
的NPM
模块设置元数据。代码如下:
app.post('/api/assets', multer.single('qqfile'), function (req, res, next) {
console.log(req.file);
if (!req.file) {
return ('400 - No file uploaded.');
}
// Create a new blob in the bucket and upload the file data.
var blob = bucket.file(req.file.originalname);
var blobStream = blob.createWriteStream();
var metadata = {
contentType: mime.lookup(req.file.originalname)
};
blobStream.on('error', function (err) {
return next(err);
});
blobStream.on('finish', function () {
blob.setMetadata(metadata, function(err, response){
console.log(response);
// The public URL can be used to directly access the file via HTTP.
var publicUrl = format(
'https://storage.googleapis.com/%s/%s',
bucket.name, blob.name);
res.status(200).send(
{
'success': true,
'publicUrl': publicUrl,
'mediaLink': response.mediaLink
});
});
});
blobStream.end(req.file.buffer);
});
我在这里漏掉了什么?
现在,您的浏览器可能下载图像而不是显示它们的原因有两个。首先,如果Content-Type设置为“Application/Octet-Stream”,大多数浏览器会将结果下载为文件,而不是显示它们。这很可能发生在你的案子上。
第二个原因是如果服务器使用“Content-Disposition:Attachment”标头进行响应。当您像上面所做的那样从主机“storage.googleapis.com”中获取GCS对象时,通常不会发生这种情况,但如果您显式地为上传的对象指定了contentDisposition就会发生这种情况。
出于这个原因,我怀疑您的一些对象没有“image/jpeg”内容类型。您可以使用gsutil进行设置,如下所示:gsutil-m setmeta'content-type:image/jpeg'gs://mybucketname/**
当使用带有base64数据的PUT请求上传到Google cloud storage时,图像(PNG)不会在浏览器中显示,并表示它包含错误(在FF中查看时)。 根据我在网上读到的东西,我觉得这是可能的,但我找不到任何例子来说明它是如何用PUT来完成的,以表明它工作时缺少什么。
我正在尝试使用Google云存储API,该API现已发布在App Engine网站的文档部分。文档指出,您必须将appengine服务帐户添加为API控制台中的团队成员。然而,我们在谷歌应用程序域中使用云存储,这只允许该域的用户作为团队成员添加。那么,不可能添加服务帐户(@appspot.gserviceaccount.com)吗?。有什么变通办法吗?
我有一个具有统一访问控制的Google云存储桶,我在权限中添加了“诱惑者”。它说该对象是公共的,但当我尝试打开链接时,仍会收到此消息:“匿名调用方没有storage.objects.get access to the Google Cloud storage object”错误代码为“401”。我希望任何用户都能够访问该链接。我该怎么做?提前谢谢! 向你问好本
我建立Android应用程序链接到谷歌云存储。我想允许访问GCS到我的Android应用程序只。 谷歌提供三种安全连接地面军事系统的解决方案: Oauth 2.0(谷歌账户也是如此) 资料来源:https://developers.google.com/storage/docs/authentication?hl=FR 是否有其他通过地面军事系统安全连接的解决方案?我希望通过这种方式在地面军事系统
我们一直在使用服务,在(AWS)中,我们意外删除了一个目录,因此我们认为它应该在中,但是经过查看,尽管处于打开状态,但它并不存在。
我知道可以使用谷歌API视觉在网上找到类似的图片。我的目标是根据我的图像数据库找到类似的图像。我不想在网上看到类似的图片。 可能吗? 如果是,你能给我一些链接或建议吗? 谢谢