Google 云存储 JavaScript 使用情况

2023-12-25

我正在尝试使用以下命令将图像上传到 Google Cloud Storage 上的存储桶中JSON API https://cloud.google.com/storage/docs/json_api/,使用 Javascript 示例:API JavaScript 示例 https://cloud.google.com/storage/docs/json_api/v1/json-api-javascript-samples

我可以上传图片,但它要求我登录我的谷歌帐户。

该示例有一个授权按钮,据我所知,该按钮管理 OAuth 凭据。

    function checkAuth() {
  gapi.auth.authorize({
    client_id: clientId,
    scope: scopes,
    immediate: true
  }, handleAuthResult);
}

问题是:

我想在没有弹出屏幕的情况下进行身份验证,这意味着无需使用 Google 登录。因为我的客户不知道电子邮件或密码,所以我希望它能够自动完成。

我怎样才能实现这个目标?

Thanks!

- - - - - - - - - - - - - - -更新 - - - - - - - - - -

因此,根据布兰登的回答,我做了以下工作:

我已经创建了我的保单文件并按如下方式签署:

var http = require('http');
var fs = require('fs');
var crypto = require('crypto');
var express = require('express');
var app = express();
var p12ToPem = require("./node_modules/p12-to-pem/p12ToPem.js");
var p12File = fs.readFileSync("./KEY.p12");
var pemKey = p12ToPem(p12File, "notasecret");
 var policyJson={"expiration": "2050-06-16T11:11:11Z",
"conditions": [["starts-with", "$key", "" ],
{"acl": "bucket-owner-read" },
{"bucket": "my-bucket'name"},
{"success_action_redirect":"http://www.example.com/success_notification.html" },
 ["eq", "$Content-Type", "image/jpeg" ],
 ["content-length-range", 0, 1000000]
 ]
};
var policyJson64 = new Buffer(''+policyJson).toString('base64');
var sign = crypto.createSign('RSA-SHA256');
sign.update(policyJson64);
var sig = sign.sign(pemKey, 'base64')
console.log("policyJson64:"+policyJson64);
console.log("sig:"+sig);

我的帖子表格如下:

  <form action="http://my-bucket-name.storage.googleapis.com" method="post" enctype="multipart/form-data">
<input type="text" name="key" value="">
<input type="hidden" name="bucket" value="my-bucket-name">
<input type="hidden" name="Content-Type" value="image/jpeg">
<input type="hidden" name="GoogleAccessId" value="884257827820-so77htet9tafrcjjp83m7api9lh12qsn@developer.gserviceaccount.com">
<input type="hidden" name="acl" value="bucket-owner-read">
<input type="hidden" name="success_action_redirect" value="http://www.example.com/success_notification.html">
<input type="hidden" name="policy" value="DONT KNOW WHAT TO PUT HERE">
<input type="hidden" name="signature" value="NEITHER HERE">
<input name="file" type="file">
<input type="submit" value="Upload">

无论 javascrypt 中获得的组合如何,我似乎都无法弄清楚策略中的内容和签名中的内容,是的!我已阅读 API,但不清楚这 2 个输入中的内容。 我也尝试将 PolicyJson64 和 sig 的值放入策略输入中。我也尝试过在签名输入中输入 sig 和 pemKey 的值。

我收到此错误:

<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.
</Message>
<StringToSign>
a/vDHoeJ1jIZibjgLnS/ZfMftmyz8IaISJiVt1b2wDNbDjnSR+0HyEDW9/Lew7ufMjU9xdtX/Uld06IJbeYz3OWGHnH4osJNS614RoDVd7lq2qft+bSCqYPtkagJiUWs9SNOPvuQzISthqloPQOwJ1LLXHYmV52c73OpexAnSR4=
</StringToSign>
</Error>

我应该放什么?

- - - 更新 - - -

请不要复制粘贴没有帮助的文档。 添加赏金


上传对象需要某种形式的授权(您也可以创建一个允许真正匿名写入的存储桶,但这很少是一个好主意)。有几种方法可以获得授权。

正如您所发现的,一种方法是让用户登录其 Google 帐户并将其用作授权。如果该应用程序适用于少数已知个人,那么这是一个不错的选择。

上传图像的另一种方法是使用签名 URL 或签名表单策略文档。这允许您的用户使用标准 HTML 表单来选择并上传已由您的应用程序预先授权的图像。策略文档是一小段文本,描述了允许用户执行的操作并已由适当的凭据签名。

以下是政策文件的示例:

{"expiration": "2010-06-16T11:11:11Z",
 "conditions": [
    ["starts-with", "$key", "" ],
    {"acl": "bucket-owner-read" },
    {"bucket": "travel-maps"},
    {"success_action_redirect": "http://www.example.com/success_notification.html" },
    ["eq", "$Content-Type", "image/jpeg" ],
    ["content-length-range", 0, 1000000]
  ]
}

该文档规定用户只能使用它来上传具有bucket-owner-read ACL的对象,只能上传到“travel-maps”存储桶,只能上传大小不超过1MB的对象,等等。然后,服务器将使用其密钥签署该文档。然后,该文档(以 64 为基数)及其签名将包含在 HTML 表单中,如下所示:

<form action="http://travel-maps.storage.googleapis.com" method="post" enctype="multipart/form-data">
  <input type="text" name="key" value="">
  <input type="hidden" name="bucket" value="travel-maps">
  <input type="hidden" name="Content-Type" value="image/jpeg">
  <input type="hidden" name="GoogleAccessId" value="[email protected] /cdn-cgi/l/email-protection">
  <input type="hidden" name="acl" value="bucket-owner-read">
  <input type="hidden" name="success_action_redirect" value="http://www.example.com/success_notification.html">
  <input type="hidden" name="policy" value="eyJleHBpcmF0aW9uIjogIjIwMTAtMDYtMTZUMTE6MTE6MTFaIiwNCiAiY29uZGl0aW9ucyI6IFsNCiAgWyJzdGFydHMtd2l0aCIsICJrZXkiLCAiIiBdLA0KICB7ImFjbCI6ICJidWNrZXQtb3duZXItcmVhZCIgfSwNCiAgeyJidWNrZXQiOiAidHJhdmVsLW1hcHMifSwNCiAgeyJzdWNjZXNzX2FjdGlvbl9yZWRpcmVjdCI6ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3N1Y2Nlc3Nfbm90aWZpY2F0aW9uLmh0bWwiIH0sDQogIFsiZXEiLCAiQ29udGVudC1UeXBlIiwgImltYWdlL2pwZWciIF0sDQogIFsiY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCAxMDAwMDAwXQ0KICBdDQp9">
  <input type="hidden" name="signature" value="BSAMPLEaASAMPLE6SAMPLE+SAMPPLEqSAMPLEPSAMPLE+SAMPLEgSAMPLEzCPlgWREeF7oPGowkeKk7J4WApzkzxERdOQmAdrvshKSzUHg8Jqp1lw9tbiJfE2ExdOOIoJVmGLoDeAGnfzCd4fTsWcLbal9sFpqXsQI8IQi1493mw=">
  <input name="file" type="file">
  <input type="submit" value="Upload">
</form>

这里有更多关于其工作原理的文档:

https://cloud.google.com/storage/docs/reference-methods#policydocument https://cloud.google.com/storage/docs/reference-methods#policydocument

请记住,签名 URL 与签名表单不同。 “签名 URL”是非常具体的任意命令,可以完全按照规定执行。您可以使用它们进行上传,但它们的通用性不如签名的保单文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google 云存储 JavaScript 使用情况 的相关文章

  • 在 Javascript 中获取第一个数字出现后的子字符串

    我正在尝试提取第一个数字之后 并包括 的字符 ABC 123SD gt 123SD 123 gt 123 123SD gt 123SD ABC gt 我当前的解决方案如下 var string1 ABC 123SD var firstDig
  • 定义 js-xlsx 单元格范围

    我正在尝试使用 js xlsx 读取 Excel 值 我可以使用以下代码从工作簿工作表中获取单元格值 if typeof require undefined XLSX require xlsx var workbook XLSX readF
  • Angular 2 Material 2 日期选择器日期格式

    我不知道如何更改材料2日期选择器的日期格式 我已阅读文档 但我不明白我实际上需要做什么 datepicker默认提供的输出日期格式为f e 6 9 2017 我想要实现的目标是将格式更改为类似的格式9 Jun 2017或任何其他 文档htt
  • Javascript - 在加载所有图像后执行

    看了别人的问题我想 window onload 会回答我的问题 我已经尝试过这个 但它会在页面加载时立即执行代码 而不是在图像加载之后 如果有什么区别的话 图像来自 CDN 并且不是相对的 有人知道解决办法吗 我没有使用 jQuery 想要
  • 创建一个简单的 10 秒倒计时

    我想要一行这样写的 Your download will begin in 10 9 8 etc Beginning on page load seconds 我已经设置了 10 秒下载文本 并且我还查看了其他 stackoverflow
  • 如何在 JSON 中转义双引号

    我试图显示双引号 但它显示了反斜杠之一 maingame day1 text1 Tag 1 text2 Heute startet unsere Rundreise Example text Jeden Tag wird ein neues
  • 启用/禁用由用户输入确定的复选框

    我有一个简单的表单 用户可以在其中输入他的联系号码 如果联系号码以 07 开头 则该复选框已启用 其他我需要禁用它的复选框 我已经编写了一些代码 但我面临的问题是 当用户键入 01 时 它会被禁用 但如果他们继续在 01 之后添加任何其他数
  • 在 jQuery 可排序中对多个选定项目进行排序?

    我试图在 jQuery 可排序集中选择多个项目 然后将选定的项目一起移动 这是我的弱点开始尝试使其发挥作用 http jsfiddle net benstenson CgD8Y 这是代码 HTML div class container d
  • 如何更改自动完成中的结果过滤器?

    我不想进行字面匹配 而是想通过正则表达式选择结果 我可以覆盖自动完成的默认行为来完成此任务还是需要替代结构 有一个内置的方法可以做到这一点 只需提供一个函数source http jqueryui com demos autocomplet
  • ToggleClass 动画 jQuery?

    我的网站上有一个部分 当用户单击时我希望它展开 我正在使用 jQuerytoggleClass为了这 expandable function e e preventDefault this closest article toggleCla
  • JavaScript 测验在提出所有问题之前结束

    我现在正在学习 JavaScript 并且正在创建一个测验 我的测验运行正常 控制台中没有任何错误 但它会跳过问题 有时会在回答所有问题之前结束测验 即使给出正确答案 也会减少时间 我不太确定为什么它会这样做 因为在我看来它的编码是正确的
  • 为什么 Web Worker 性能在 30 秒后急剧下降?

    我正在尝试提高在网络工作人员中执行时脚本的性能 它旨在解析浏览器中的大型文本文件而不会崩溃 一切都运行得很好 但我注意到使用网络工作者时大文件的性能存在严重差异 于是我做了一个简单的实验 我在同一输入上运行脚本两次 第一次运行在页面的主线程
  • 如何检测元素内容何时发生变化

    我正在寻找一种方法来监视元素内动态填充 无页面重新加载 内容 以便我可以将类添加到另一个元素 到目前为止我有这个 HTML div class message container div class messages error span
  • 如何在 ASP.NET MVC 3 的 Razor 视图中编码嵌入的 javascript?

    如何在以下上下文中正确编码 JavaScript 我的 JSON 对象中的值是由应用程序管理员设置的 因此我假设它们需要正确编码 对于 HTML 和 JavaScript 都是如此 我在用着System Web Script Seriali
  • Knockout.js 安全绑定

    我想使用带有淘汰赛的安全绑定 为此我使用敲除安全绑定 js https github com brianmhunt knockout secure binding 谁能解释一下为什么下面的代码不起作用 它会抛出一个错误 未捕获 淘汰 安全
  • IE 中的每个 JavaScript 支持?

    我有这个代码
  • MongoDB中如何通过引用字段进行查询?

    我有两个 Mongo 模式 User id ObjectId name String country ObjectId Reference to schema Country Country id ObjectId name String
  • 如何使用 jQuery 或 JavaScript 聚焦 或 标签?

    for var i 0 i
  • 使用 Python 将对象列表转为 JSON

    我在转换时遇到问题Object实例到 JSON ob Object list name scaping myObj base url u number page for ob in list name json string json du
  • 无法使用 HTML 设置未定义 jQuery UI 自动完成的属性“_renderItem”

    我使用以下代码将 jQuery UI 自动完成项呈现为 HTML 这些项目在自动完成控件中正确呈现 但我不断收到此 JavaScript 错误并且无法移动过去 Firefox 无法转换 JavaScript 参数 Chrome 无法设置未定

随机推荐

  • libsass-python 编译文件

    我最近发现一个很棒的 python 库 编译 SASS 速度非常快 libsass python https github com dahlia libsass python看起来非常好而且非常快 我如何使用它来监视 sass 文件夹或文件
  • 如何获得 OxyPlot 中的所有颜色?

    我有一个问题 我在 WPF C 中使用 OxyPlot 我需要将所有颜色设置为系列的 MarkerType 和 MarkerStroke 我怎样才能获得所有颜色 Green IndianRed 等是静态 OxyColors 类中的静态字段
  • 在 std::set 中使用运算符 != 作为运算符 < 是否安全?

    我有一个包含一些成员的结构 并且我有一个为其实现的运算符 在operator 的帮助下实现operator struct Data std string str1 std string str2 std string str3 std st
  • 为 iPhone 模拟器构建时保持 App 目录相同吗?

    我正在构建一个 iPhone 应用程序 我的应用程序在首次安装时将大量资源复制到应用程序的文档目录中 在开发应用程序时 我只需修改 iPhone 模拟器的应用程序文档目录中的文件 即可轻松测试内容 而无需重新构建应用程序 但是 当我重建应用
  • django:如何在 ModelForm 中访问当前请求用户?

    在我的 ModelForm 实现中 我想根据当前用户是否是超级用户来执行不同类型的验证检查 如何访问当前请求用户 如果您使用基于类的视图 CBV 则在表单构造函数中传递一个额外的参数 例如在get forms class or in for
  • 如何确定 UsbRequest.queue(..) 方法接收的字节长度?

    我在 Android 3 1 中遇到 UsbRequest 类的问题 这是我的代码 ByteBuffer buffer ByteBuffer allocate 4096 buffer order ByteOrder LITTLE ENDIA
  • 如何通过 python 更改 CSV 文件中的值?

    我需要能够查找并更改 CSV 库存文件中的值 我知道如何搜索一个值 但是当我尝试使用csv writer然后它返回一个错误 Traceback most recent call last File pbsrvfile ExamAccount
  • Android OpenGL ES 2.0:GL_FLOAT 纹理是否可以作为 COLOR 附件分配给 FBO?

    我想通过 glReadPixels 使用 GL FLOAT 纹理 获取值 我的 Android 设备支持 OES texture float 但是 附加GL FLOAT纹理时出现错误 在Android的OpenGL ES 2 0中 将GL
  • PLINQ 查询给出溢出异常

    我正在运行 PLINQ 查询 如下所示 ParallelQuery
  • 在特定任务中使用 NFC 启动 Activity

    我的应用程序包含许多活动 其中一项活动响应 NFC 意图过滤器以及标准意图 但是 该活动在其自己的任务中启动 而不是在与应用程序相同的任务中启动 当 NFC 意图启动时 应用程序不一定正在运行 但如果是 我希望该活动在同一任务中启动 以确保
  • pygame - 向下滚动页面

    简而言之 我的程序是一个联系人应用程序 这显然意味着一个人需要能够在应用程序中存储多个联系人 这反过来又意味着联系人最终将 离开 屏幕 所以我需要能够向下滚动页面 以便人们可以看到他们的所有联系人并与特定联系人进行交互 但是 我有点困惑 我
  • 子查询 where 子句中的未知列

    我的 INNER JOIN 子查询的 where 子句遇到问题 我收到未知的列错误M idMembre 我尝试使用表名而不是别名 但遇到了同样的问题 我还尝试从子查询中删除 WHERE 子句 并在子查询后的 ON 子句中添加此条件 但是 无
  • 当 iPhone 进入待机模式时,iPhone 应用程序会发生什么情况?

    我的应用程序使用 NSTimer 当 iPhone 进入待机模式 通过按下硬件按钮或通过空闲计时器 时 NSTimer 似乎不会触发 当我再次激活 iPhone 时 我的应用程序仍然在前台 当 iPhone 处于待机模式时 第三方应用程序会
  • 由于未捕获的异常“_HKObjectValidationFailureException”而终止应用程序

    我正在将血糖值保存到 iOS 中的 Health Kit 应用程序中 void viewDidLoad float bloodGlucose 20 float bloodGlucoseValue int bloodGlucose NSLog
  • SOAP-UI - 如何在参数内传递 xml

    在 SOAP UI 中 我向 Web 服务发出如下请求
  • 正则表达式量词加号和星号之间的区别

    我尝试从字符串中提取错误号 例如 Wrong parameters Error 1356 Pattern p Pattern compile d Matcher m p matcher myString m find System out
  • Android 上 imageView 的渲染圆角

    我有以下一段代码用于渲染带有圆角的 imageView public class RoundedCornerImageView extends ImageView private int rounded public RoundedCorn
  • Amazon RDS MySQL 实例执行速度非常慢

    我在Amazon EC2 新加坡区域 上发布了我的网站 并使用MySQL RDS实例进行数据存储 除了性能之外 一切都工作得很好 我看来 我的所有查询 尤其是 select 语句 执行速度非常慢 如果我在本地电脑上检查这个问题 它运行得很好
  • 关于python中switch的一些问题

    这是我在 StackOverflow 上的第一个问题 所以如果某些信息不存在或者我错过了一些重要的信息 请耐心等待我 但无论如何我会尽力 最近我开始用Python2 7编写代码 所以我不太擅长 在使用 PyGtk PyGObject Gla
  • Google 云存储 JavaScript 使用情况

    我正在尝试使用以下命令将图像上传到 Google Cloud Storage 上的存储桶中JSON API https cloud google com storage docs json api 使用 Javascript 示例 API