【问题标题】:Alway get error: wrong uploadSignature on Signed uploads Cloudinary Widget总是出错:在签名上传 Cloudinary Widget 时上传签名错误
【发布时间】:2019-12-14 14:06:00
【问题描述】:

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

但我总是收到错误错误的上传签名

错误: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'.

只是时间戳有点不同。

这是我用来生成签名的 codeigniter 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>

我不知道为什么时间戳不同。只是有点不同。谁能帮帮我?

【问题讨论】:

    标签: cloudinary


    【解决方案1】:

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

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

    要签名的有效负载在 params_to_sign 内:

    var generateSignature = function(callback, params_to_sign){
        $.ajax({
         url     : signature_endpoint_url,
         type    : "POST",
         dataType: "json",
         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); }
        });
      }
    
    var widget = cloudinary.createUploadWidget({
                cloud_name: cloud_name,
                            api_key: api_key,
                            upload_signature: generateSignature,
                upload_preset: preset_name,
                sources: ['local', 'url'],
    
            }, (error, result) => {  
    
    
    });
    

    【讨论】:

      【解决方案2】:

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

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

      您必须在 cloudinary.createUploadWidget 函数中添加 uploadSignatureTimestamppublicId 参数。它必须包含为uploadSignature 生成的相同时间戳和公共ID。希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-25
        • 2018-08-01
        • 2017-05-10
        • 2015-11-01
        • 2019-01-23
        • 2018-12-24
        • 2013-06-08
        • 1970-01-01
        相关资源
        最近更新 更多