小编Joh*_*ung的帖子

使用PHP使用JWT为Google云端存储签名URL

我刚刚开始将我的Google云存储代码从API 1.0版升级到2.0版,我遇到了一些麻烦.

在1.0版本中,我使用签名URL,使用.p12文件取得了巨大成功.然而,在新版本中已弃用,我必须使用Firebase/php-jwt,而不是使用JSON文件.

问题是它只是不工作,我收到错误:

<?xml version='1.0' encoding='UTF-8'?><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>PUT

image/png
1483626991
/myBucket/folder/test.PNG</StringToSign></Error>
Run Code Online (Sandbox Code Playgroud)

这是用于签名的简化代码.

$string = ($method . "\n" .
          $contentMd5 . "\n" .
          $contentType . "\n" .
          $expiration . "\n" .
          $file);

$signedURL = base64_encode(Firebase\JWT\JWT::encode($string,
        file_get_contents($credentialsFilePath)));
Run Code Online (Sandbox Code Playgroud)

收到signedURL后,我使用正确的数据构建一个URL.我从1.0和2.0更改的唯一部分是您对URL进行签名的部分.此外,我已经检查了响应的"StringToSign"字段中的字符串与我正在签名的字符串完全相同.

在1.0版本中,我签署了这样的URL:

$signedURL = base64_encode((new Google_Signer_P12(
        file_get_contents($p12FilePath),
        'notasecret'
      ))->sign($string));
Run Code Online (Sandbox Code Playgroud)

所有这一切让我相信我正在唱出正确的内容,但是以错误的方式使用JWT功能.还有其他人这样做过吗?你是怎么做到的?

万一有趣的是这是我构建的URL(与1.0一起使用):

$returnArr['url'] = "https://{$bucket}.commondatastorage.googleapis.com/"
    . $prefix . '/' . rawurlencode($file)
    . "?GoogleAccessId=" . rawurlencode($serviceEmail)
    . …
Run Code Online (Sandbox Code Playgroud)

php cloud google-cloud-storage google-api-php-client

14
推荐指数
1
解决办法
859
查看次数

C#事件没有引发和线程

我在活动中遇到了一些麻烦.问题是有时事件不会被提出.

我们有一个公司的相机,我们已经在我们的软件中实现了.在软件中,我们注册了一个事件,每次在相机上拍摄图像时都会触发该事件.

我注意到随着处理能力需求的增加(例如,计算图像上的平均均值和处理更大的图像),有时会导致事件没有被提升.此外,我可以通过提高相机的帧速率来更频繁地实现这一点.我知道帧丢失了,因为它们标有ID.

在他们自己的演示软件中,我能够以相同的速度运行而没有任何问题.他们的软件不执行任何计算或任何事情,只是接收并显示图像.

我很困惑,因为这是我与相机最接近的连接; 我所能做的就是等待事件上升.我想问你是否知道会忽略某个事件的任何情况.

对我来说,看起来相机正在拍摄一张图像,但由于某种原因,甚至没有拿起(超载?).

以下是一些相关代码:

private void Camera_OnFrameReceived(AVT.VmbAPINET.Frame frame)
{
    if (frame.ReceiveStatus == VmbFrameStatusType.VmbFrameStatusComplete)
    {
        if (lastID != 0 && lastID != 1)
        {
            if(frame.FrameID - lastID > 1)
                Debug.WriteLine("HEEEEYYY SKIPPED A FRAME, ID: " + frame.FrameID.ToString() + " TOTAL LOST: " + (frame.FrameID - lastID - 1).ToString());
        }
        lastID = frame.FrameID;
        //Debug.WriteLine("Frame received from camera");

        //if the camera is in single mode, dont raise the event (frame already taken)
        if (Mode == CaptureMode.Single)
            return;

        //set the …
Run Code Online (Sandbox Code Playgroud)

c# events multithreading

5
推荐指数
1
解决办法
924
查看次数

谷歌云存储搜索文件

我正在开发一个可以提供大量文件的应用程序。假设它是一家汽车公司。每辆车都有一个文件夹,其中包含该车的文档/文件。这些文件被上传到类别中,在 GStorage 中表示为“文件夹”。2 辆不同汽车的 2 个文件可能如下所示:

car1/receipt/2016-02-02_payment.pdf
car1/pictures/tires.png

car2/receipt/2016-01-02_payment.pdf
Run Code Online (Sandbox Code Playgroud)

假设我想在我的应用程序中列出所有收据。我该怎么做?由于 Google Cloud Storage 中的搜索功能非常有限,我目前提出的解决方案是拥有一个包含所有文件的镜像数据库表,当我想访问这些文件时,我会为用户生成 URL。如果 GStorage 有一种搜索 */ 文件的方法,那就太好了。

search storage file google-cloud-storage

5
推荐指数
2
解决办法
7191
查看次数

如果我想使用"a = {x,y};",那么要重载哪个运算符

我正在创建自己的课程,我希望能够像标题一样启动它.

a = {x, y};
Run Code Online (Sandbox Code Playgroud)

我无法找到任何指示我如何做到这一点.

c++ overloading operator-keyword

1
推荐指数
1
解决办法
92
查看次数