0

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

这似乎很容易,因为我已经多次单独完成这些请求。我正在尝试从我自己的服务器获取一个简单文件并将其发布到此 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);
        });
});
4

1 回答 1

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();      
于 2013-09-28T14:11:05.620 回答