Cloudinary jQuery直接上传问题

时间:2014-08-28 03:58:32

标签: cloudinary

我正在实施Cloudinary Jquery Upload。从我的文件上传网页,如果我浏览到另一个网站(google.com或任何外部网站),然后点击浏览器上的后退按钮进入同一个文件上传页面,则上传失败。

我收到的错误消息是(来自Firebug):

400错误请求 {“error”:{“message”:“上传预设必须在使用未签名的上传时指定上传预设”}}

  • 我没有在Cloudinary管理控制台上启用未签名的上传 因为我的意图是签名上传

这是在后端为data-form-data创建的JSON数据:

  

{ “时间戳”:1409146953, “回调”: “http://newappsure.herokuapp.com/vendor/cloudinary/cloudinary_cors.html”, “签名”: “19071a3e822eed51238454e359589f52cccca042”, “API_KEY”:“224456847515364” }

以下是javascript和输入HTML:

   <script type="text/javascript”>
     $.cloudinary.config({cloud_name:'dashy', api_key:’XXXXXXXXXXXXXXX'});
   </script>
   <input name="file" type="file" id="uploadinput" class="cloudinary-fileupload" data-cloudinary-field="image_upload"
 data-form-data="" ></input>
   <script>
       $.ajax({
             url: '/filer',
             type: 'POST',
             success: function(response){
                    $('#uploadinput').attr('data-form-data', response);
             }
        });
   </script>

这是生成JSON的Ruby后端:

 post '/filer' do
      ts = Time.now.getutc.to_time.to_i.to_s
      secret="XXXXXXXXXXXXXXXXXXXXXX"
altogether="callback=http://newappsure.herokuapp.com/vendor/cloudinary/cloudinary_cors.html&timestamp="+ts+secret
      sig=Digest::SHA1.hexdigest altogether
      ts = Time.now.getutc.to_time.to_i
      {:timestamp => ts, :callback => "http://newappsure.herokuapp.com/vendor/cloudinary/cloudinary_cors.html", :signature => sig, :api_key =>"XXXXXXXXXXXXXXXX"}.to_json
 end

请帮助我理解我做错了什么?

2 个答案:

答案 0 :(得分:1)

虽然您的解决方案可行,但更优化的方法是更新上传参数以调用$(...).fileupload({formData: data}),其中data是参数哈希(不是JSON序列化)。 欲获得更多信息: http://support.cloudinary.com/entries/24950218-Why-is-updating-a-cloudinary-fileupload-field-dynamically-not-working-

答案 1 :(得分:0)

通过强制使用以下代码段重新加载页面来使其工作(参考:https://stackoverflow.com/a/9217531/3781343http://www.webdeveloper.com/forum/showthread.php?137518-How-to-refresh-page-after-clicking-quot-Back-quot-button

<input type="hidden" id="refreshed" value="no">
<script type="text/javascript">
onload=function(){
var e=document.getElementById("refreshed");
if(e.value=="no")e.value="yes";
else{e.value="no";location.reload();}
}
</script>