如何将POST请求发送到其他服务器绑定文件到formdata

时间:2017-12-01 12:00:51

标签: javascript rest web-services post form-data

我有一个pdf文件,它使用我的服务器端代码生成到我的本地服务器中。我想向请求POST的其他服务器发送请求。 post方法将参数作为 FormData ,其中formdata类型

  

一个是string,另一个是file类型。

content-type
form-data
Body
  PDF file (file type)
   string value
  

是否可以在不浏览文件位置的情况下发出POST请求?

1 个答案:

答案 0 :(得分:0)

做一些R& D我已经通过以下步骤克服了这个问题,因为除了浏览安全原因之外,没有办法在客户端(基本上是js)自动从物理位置获取文件对象。

  1. 在我的本地服务器中,我创建了一个REST服务。哪个回复base64 string所需文件。
  2. 比我从REST api拨打javaScript,作为回复,我收到了base64 string。而且我将它转换为bytes array而不是Blob对象而不是File对象。

      

    base64 string ==> bytes array ==> Blob object ==> File object

    var base64 = this.getpdfFromLocal() //get the base64 string
    var byteArray= this.base64ToByte(base64 );
    var file = this.getFileFromByteArray(byteArray);
    
    //return the byte array form the base64 string
    MyApi.prototype.base64ToByte= function(base64) {
        var binaryString = window.atob(base64);
        var binaryLen = binaryString.length;
        var bytes = new Uint8Array(binaryLen);
        for (var i = 0; i < binaryLen; i++) {
            var ascii = binaryString.charCodeAt(i);
            bytes[i] = ascii;
        }
        return bytes;
    };
    MyApi.prototype.getFileFromByteArray=function(byteArray) {
        var blob = new Blob([byteArray]);
        var file = new File([blob], "resource.pdf");
        return file;
     };
    
  3. 最后,我使用文件对象制作from data并向另一台服务器REST发送请求。

    var formdata = new FormData();
    formdata.append("some_value", "Some String");
    formdata.append("file", file);
    var url = "http://yoururl.com";
    var result =$.ajax({
        url             : url ,
        type            : 'POST',
        data            : formdata,
        contentType     : false,
        cache           : false,
        processData     : false,
        scriptCharset   : 'utf-8',
        async           : false
    }).responseText;