jQuery / JS GET从一台服务器,POST接收文件到另一台服务器

时间:2013-09-28 13:02:25

标签: jquery ajax

我们最近购买了许可证,以便在我们的代码中使用其他人的网络服务。基本上,我需要能够从一个服务器检索文件,然后立即将该文件POST到另一个服务器,并查看响应文本。

因为我已经单独完成了这些请求,所以看起来很容易。我正在尝试从我自己的服务器获取一个简单的文件并将其发布到此API。

这是我正在使用的当前代码。

我发布的API会根据fileModel参数返回错误,因此看起来我没有正确的“数据”变量(例如文件)。我假设GET调用返回的数据变量不是真正的“文件”类型,因此帖子失败了。

我不确定如何正确创建从GET返回的“文件”对象,以便它作为文件正确发布。

$.get( "http://localhost/myfile.png", function( data ) {
    var sendData = {
        token : "mytokenhere",
        fileModel : data,
        title : "Cylinder1",
        description: "Cylinder1",
        private: true,
    };
    $.post( "https://api.url.com/", sendData)
        .done(function( data ) {
            alert( "Data Loaded: " + data );
        })
        .fail( function(xhr, textStatus, errorThrown) {
            alert(xhr.responseText);
        });
});

1 个答案:

答案 0 :(得分:2)

你无法真正获得$ .get的二进制响应,你必须使用普通的XMLHttpRequest

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
    if (this.readyState == 4 && this.status == 200){
        //this.response is what you're looking for
        var data = new FormData();
        data.append('fileModel', this.response);
        data.append('description', "Cylinder1");
        data.append('private', true);
        data.append('title', "Cylinder1");
        data.append('token', "mytokenhere");
        $.ajax({
            url:'',
            type: 'post',
            data: data,
            contentType: false,
            processData: false
        })
        .done(function( data ) {
            alert( "Data Loaded: " + data );
        })
        .fail( function(xhr, textStatus, errorThrown) {
            alert(xhr.responseText);
        });
    }
}
xhr.open('GET', 'http://localhost/myfile.png');
xhr.responseType = 'blob';
xhr.send();