Articles of 谷歌云存储

Google云端存储似乎忽略了客户提供的encryption密钥标头

我正在开发一个将图像存储在Google Cloud Storage(GCS)中的项目。 我使用下面的代码运行一个NodeJS服务器。 文件通过签名的URL发送到服务器,以便在GCS中恢复上传。 抛光整个文件后,服​​务器将请求发送到该地址。 那部分工作。 但是,当我将请求头添加到指定客户提供的encryption密钥的请求时,GCS将忽略它们。 上传完成,返回200 ,并应用默认encryption密钥。 当我尝试x-goog-encryption-algorithm的无效值,我应该得到一个400 ,它上传罚款。 我应该非常接近,但是我错过什么标题或configuration可以指定客户提供的encryption密钥? var crypto = require("crypto"); var fs = require("fs"); var Request = require("request"); var hashKey = function(key) { var hash = crypto.createHash("sha256"); key = new Buffer(key); hash.update(key); return hash.digest("base64"); }; var GCS = module.exports = function GCS(env) { // config contains the encryption […]

Google云存储使用节点js

我需要使用谷歌云和节点js上传和分享我的文档。 我创build了一个Google云帐户,并使用console.developers.google.com网页在Google存储中创build了存储桶,文件夹和对象。 我有些疑惑 为单个项目创build了多less桶(如果可能的话) 创造100万桶?) 如何共享文件夹? 如果可以使用授权令牌来访问存储桶中的对象(对于公共来说,每个请求中的令牌都会改变)

Node.jsstream直接上传到Google云端存储

我有一个运行在Google Compute VM实例上的Node.js应用程序,它直接从POST请求(不通过浏览器)接收file upload,并将传入的数据stream式传输到Google Cloud Storage(GCS)。 我正在使用Restify b / c我不需要Express的额外function,因为它可以很容易地stream入传入的数据。 我为这个文件创build一个随机的文件名,把传入的req转移到一个整洁的小节点封装器(可以在这里find: https : //github.com/bsphere/node-gcs ),它向GCS发出一个PUT请求。 使用PUT的GCS文档可以在这里find: https : //developers.google.com/storage/docs/reference-methods#putobject …它说如果使用chunked transfer encoding Content-Length是不必要的。 好消息:该文件正在相应的GCS存储“桶”内创build! 坏消息: 我还没有想出如何从Restify获取传入文件的扩展名(注意手动设置'.jpg' 和 content-type )。 该文件正在经历轻微的腐败(几乎可以肯定地做我做错了PUT请求)。 如果我从Google下载POST文件,OSX告诉我它的损坏…但是,如果我使用PhotoShop,它打开,看起来很好。 更新/解决scheme 正如vkurchatkin所指出的vkurchatkin ,我需要parsingrequest对象,而不是仅仅把所有东西都传送给GCS。 在尝试了更轻的busboy模块之后,我决定使用multiparty更容易一些。 为了dynamic设置Content-Type ,我简单地使用Mimer ( https://github.com/heldr/mimer ),引用传入文件的文件扩展名。 重要的是要注意,由于我们正在pipe道part对象, part头必须被清除。 否则,意想不到的信息,特别是content-type将被传递,并且可能会与我们试图明确设置的content-type冲突。 以下是适用的修改后的代码: var restify = require('restify'), server = restify.createServer(), GAPI = require('node-gcs').gapitoken, GCS […]

创build一个预先签名的url,并使用节点js将file upload到谷歌云存储

我需要使用签名的url上传文件到谷歌云存储。 我需要通过不同的步骤上传。 使用bucketName,服务密钥和需要的安全证书创buildsignedUrl(使用任何node.js库) 使用邮递员或restClient上传带有创build的签名url的单个文件。 这是我创buildsignedUrl上传的代码 var crypto = require("crypto"); var fs = require("fs"); var URL_VALID_DURATION = 1000 * 120;//for 120 seconds var expiry = Math.floor(((new Date).getTime() + URL_VALID_DURATION) / 1000); var key = 'filename'; var bucketName = 'bucketName'; var accessId = 'gserviceaccount.com'; var stringPolicy = "POST\n" + "\n" + "\n" + expiry + "\n" + […]

如何在Node.js中使用bigquery API获取800万条Google Cloudlogging?

我正在使用BigQuery查询Google云数据。 当我运行查询时,它返回大约8百万行。 但它会抛出错误: 响应太大,无法返回 我怎么能得到所有800万条logging,任何人都可以帮忙。

如何使用Node.js将base64编码图像(string)直接上传到Google Cloud Storage存储桶?

目前,我正在使用@ google-cloud / storage NPM软件包将文件直接上传到Google云端存储分区。 这需要一些诡计,因为我只有图像的base64编码的string。 我不得不: 解码string 将其另存为一个文件 将文件path发送到以下脚本以上传到Google云端存储 删除本地文件 我想避免将文件存储在文件系统中,因为我使用的是Google App Engine,如果删除操作无论如何都不起作用,我不想在那里重载文件系统/将垃圾文件放在那里。 这就是我的上传脚本现在看起来像: // Convert the base64 string back to an image to upload into the Google Cloud Storage bucket var base64Img = require('base64-img'); var filePath = base64Img.imgSync(req.body.base64Image, 'user-uploads', 'image-name'); // Instantiate the GCP Storage instance var gcs = require('@google-cloud/storage')(), bucket = gcs.bucket('google-cloud-storage-bucket-name'); […]

使用node.js为Google云端存储创build签名的URL,以便从浏览器直接上传

实际的testing用例代码: https : //github.com/HenrikJoreteg/google-cloud-signedurl-test-case 我正在尝试添加API的function,以便将签名的URL从客户端直接上传到Google Cloud Storage。 Serverside,我正在使用gcloud SDK: const gcloud = require('gcloud') const gcs = gcloud.storage({ projectId: 'my project', keyFilename: __dirname + '/path/to/JSON/file.json' }) const bucket = gcs.bucket('bucket-name') bucket.file('IMG_2540.png').getSignedUrl({ action: 'write', expires: Date.now() + 60000 }, (error, signedUrl) => { if (error == null) { console.log(signedUrl) } }) 然后在浏览器中,我有一个<input type='file'/>我select了一个文件,然后我试图把它张贴到从我的服务器端脚本生成的URL,如下所示: function upload(blobOrFile, url) { […]

Node.js POST文件到服务器

我正在尝试编写一个应用程序,允许我的用户将file upload到我的Google云端存储帐户。 为了防止覆盖,并做一些自定义处理和日志logging,我使用Node.js服务器作为中间人上传。 所以这个过程是: 用户将file upload到Node.js服务器 Node.js服务器parsing文件,检查文件types,在数据库中存储一些数据 Node.js服务器将file upload到GCS Node.js服务器响应用户请求的通过/失败备注 我正在步骤3中input一些文件,到底如何把这个文件发送给GCS。 这个问题提供了一些有用的见解,以及一个很好的例子,但我仍然困惑。 我明白,我可以打开一个ReadStream的临时上传文件,并将其传递给http.request()对象。 我感到困惑的是如何在POST请求中表示pipe道数据是filevariables。 根据GCS API Docs ,需要有一个filevariables,它需要是最后一个。 那么,如何为pipe道数据指定一个POSTvariables名呢? 如果您可以告诉我如何直接从我的用户上传pipe道,而不是将其存储在一个临时文件中,奖金点

更改Google容器引擎群集的权限

我已经能够在开发人员控制台中成功创build一个Google容器集群,并已经部署了我的应用程序。 这一切都开始良好,但是我发现我无法连接到云SQL,我得到; "Error: Handshake inactivity timeout" 经过一番挖掘,我没有任何问题从App Engine或我的本地机器连接到数据库,所以我觉得这有点奇怪。 那时我注意到了集群权限… 当我select我的集群时,我看到以下; Permissions User info Disabled Compute Read Write Storage Read Only Task queue Disabled BigQuery Disabled Cloud SQL Disabled Cloud Datastore Disabled Cloud Logging Write Only Cloud Platform Disabled 我真的希望在我的容器引擎节点中使用云存储和云SQL。 我已经允许在我的项目设置中访问这些API中的每一个,并且我的Cloud SQL实例正在接受来自任何IP的连接(我之前在App Engine上的Managed VM中运行过Node),所以我的想法是Google显式禁用这些API的。 所以我的两个问题是: 有没有什么办法可以修改这些权限? 有没有什么理由让这些API被禁用? (我假设必须有) 任何帮助非常感谢!

使用node.js删除谷歌云存储中的多个对象

我需要从谷歌云存储中删除多个对象。 我一次删除了一个对象。 这是我的代码: var gcloud = require('gcloud')({ projectId: "sampleProject1" }); var gcs = gcloud.storage(); var myBucket = gcs.bucket('sampleBucket1'); var file = myBucket.file('1.png'); file.delete(function (err, apiResponse) { if (err) { console.log(err); } else { console.log("Deleted successfully"); } }); 但是我需要同时删除多个对象。 有没有可能?