我按照教程使用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×tamp=1565139879&upload_preset=hjz6fg6e.
String to sign - 'source=uw×tamp=1565139880&upload_preset=hjz6fg6e'.
时间戳略有不同。
这是我的代码点火器Layanan控制器,用于生成签名
public function uploadsignature() {
echo 'source=uw×tamp='.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>
我不知道为什么时间戳不同。只是有点不同。有人可以帮助我吗?
答案 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_id
,source
和timestamp
。代码如下:
TimeStamp = Time.now.to_i
params_to_sign = {public_id: "Sample", source: "uw", timestamp: TimeStamp}
您必须在uploadSignatureTimestamp
函数中添加publicId
和cloudinary.createUploadWidget
参数。它必须包含与uploadSignature
相同的时间戳和公共ID。希望对您有帮助。