总是出现错误:签名的上传Cloudinary Widget上的uploadSignature错误

时间:2019-08-07 01:31:33

标签: cloudinary

我按照教程使用Cloudinary Widget上传多个图像。我想使用签名上传。 https://cloudinary.com/documentation/upload_widget#signed_uploads

但我总是会收到错误的uploadSignature错误

错误:https://i.ibb.co/hgDhZx7/Screen-Shot-2019-08-07-at-8-25-51-AM.png

Invalid Signature source=uw&timestamp=1565139879&upload_preset=hjz6fg6e.
String to sign - 'source=uw&timestamp=1565139880&upload_preset=hjz6fg6e'.

时间戳略有不同。

这是我的代码点火器Layanan控制器,用于生成签名

    public function uploadsignature() {
        echo 'source=uw&timestamp='.time().'&upload_preset=hjz6fg6e';
    }

这是使用cloudinary小部件处理上传的javascript

    <script type="text/javascript">
        var generateSignature = function(callback, params_to_sign){
          $.ajax({
       url     : '<?php echo base_url('layanan/uploadsignature'); ?>',
       type    : 'GET',
       dataType: 'text',
       data    : { data: params_to_sign},
       complete: function() {console.log('complete')},
       success : function(signature, textStatus, xhr) { callback(signature); },
       error   : function(xhr, status, error) { console.log(xhr, status, error); }
   });
      }
  </script>

  <script type="text/javascript">
    var myWidget = cloudinary.createUploadWidget({
          cloudName: 'my_cloud_name', 
          uploadPreset: 'hjz6fg6e',
          apiKey: 'my_api_key',
          uploadSignature: generateSignature}, (error, result) => { 
            if (!error && result && result.event === 'success') { 
              console.log('Done! Here is the image info: ', result.info); 
          }
      }
      )

        document.getElementById('upload_widget').addEventListener('click', function(){
            myWidget.open();
        }, false);
    </script>

我不知道为什么时间戳不同。只是有点不同。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

与上载小部件一起使用单一上载时,您需要使用上载小部件生成的时间戳,而不是在服务器上生成新的时间戳。

您应该对小部件发送到服务器的有效负载进行签名,而不必在有效负载中添加或删除参数。

要签名的有效载荷位于params_to_sign中:

hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: emailNotification.call() is applicable for argument types: () values: []

always {

        emailext (
          body: "${currentBuild.currentResult}: Job ${env.JOB_NAME} build ${env.BUILD_NUMBER}\n More info at: ${env.BUILD_URL}",
            recipientProviders: [[$class: 'DevelopersRecipientProvider'], [$class: 'RequesterRecipientProvider']],
            subject: "Jenkins Build ${currentBuild.currentResult}: Job ${env.JOB_NAME}"
        )

    }```

答案 1 :(得分:1)

我已经在我的Rails ruby​​项目中做到了。首先,您必须使用Cloudinary::Utils.api_sign_request(params_to_sign, api_secret)生成用于签名上传的经过验证的签名。 params_to_sign由3个项目组成,分别为public_idsourcetimestamp。代码如下:

TimeStamp = Time.now.to_i
params_to_sign = {public_id: "Sample", source: "uw", timestamp: TimeStamp}

您必须在uploadSignatureTimestamp函数中添加publicIdcloudinary.createUploadWidget参数。它必须包含与uploadSignature相同的时间戳和公共ID。希望对您有帮助。