jquery跨域图像上传(在同一域上工作正常,不会在跨域上获得结果)

时间:2011-05-01 14:31:49

标签: jquery file-upload

我有一个基于jquery iframe的上传脚本,允许我的客户在他们的网站上更改图像。 工作很好,但我希望有一个跨域解决方案,所以当我更新我的代码时,我的所有客户也会得到更新。

文件是实际上传的,但我无法读取iframe的内容,即使他在那里,我也可以看到它,但无法读取它。

我知道这是一个安全问题,但它是我的服务器,我只是允许上传.jpg文件。

如何解决这个问题,我的所有域都在同一个ip中,托管在vps服务器中。

一些代码

div_browser = '<iframe id="iframe_uploads" name="iframe_uploads" frameborder="0" align="center"';
    div_browser += '"></iframe>';
    modal_uploads(div_browser);
    function modal_uploads(data) {
        var modal = '<div id="modal">';
        modal += data;
        modal += '</div>';
        $("#gestor").append(modal);
        //
        var id = "#modal";
        var winH = $("#gestor").height();
        var winW = $("#gestor").width();
        $(id).css('top',  winH/2-$(id).height()/2);
        $(id).css('left', winW/2-$(id).width()/2);
        $(id).fadeIn(2000);
    }
$("#iframe_uploads").load(function() {
        var resposta = document.getElementById('iframe_uploads').contentWindow.document.body.innerHTML;
        var erro = resposta.split('|');
        var medidas = erro[1];
        if(erro[0] == "ok") {
            nome.val('pics/'+$('#ficheiro').val());
            var wh = medidas.split('=');
            $("#"+nome[0].id+"_width").val(wh[0]);
            $("#"+nome[0].id+"_height").val(wh[1]);
            $('#modal').animate({opacity: 1.0},1000).fadeOut('fast');
            $('#modal').remove();
        } else {
            $('#modal').html = resposta;
        }
    });

这样做,我有一个iframe等待上传过程的结果。 我可以看到上传已经成功,因为iframe内容就在那里,比如“ok | 44 = 55”,但是我无法操纵那些数据......

谢谢,希望你能帮助我

3 个答案:

答案 0 :(得分:0)

问题是,即使您的服务器具有相同的IP,它也是客户端的跨域问题(因为它们具有不同的域)。

但是,由于您拥有服务器,因此您可以执行一些解决方法:

1)只使用一个域名(最明显的,但最不可能的是你不能)

2)在您的服务器中使用代理代码(将一个域与另一个域通信,因此客户端只能看到1个域)

为了更好地帮助您,我想知道:1)您在服务器中使用了哪种技术? (php,java,asp.net等)2)你可以发布你的表单代码(主要是action / urls)

希望这有帮助

答案 1 :(得分:0)

我想如果没有完整的服务器控制,这是不可能的。

我设法使用php ftp上传功能。

答案 2 :(得分:0)

实际上,您可以使用以下技巧来完成这项工作:

假设您在site.com上有一个表单,并在uploads.com上载处理程序,那么您可以按照自己的意愿执行操作,但在执行其工作后上传处理程序,而不是将响应重定向发送到例如:

http://site.com/redirect/?status=OK&width=44&height=55

http://site.com/redirect/?status=Some+error+message

http://site.com/redirect/只会向您发送一个空页。

然后在您的加载处理程序中解析iframe document.location.href并获得您的回复。在某些浏览器load事件将被触发两次(重定向响应+最终空响应),您应该忽略权限被拒绝的错误。