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

How can I send the POST request to the other server binding file into formdata

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

one is string and another is file type.

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

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

做一些研发我已经通过以下一些步骤解决了这个问题,因为除了出于安全原因浏览之外,无法在客户端(基本上是在 js 中)自动从物理位置获取文件对象。

  1. 在我的本地服务器中,我创建了一个 REST 服务。所需文件的哪个响应 base64 string
  2. 然后我从 javaScript 调用 REST api,作为响应,我收到了 base64 string。然后我将其转换为 bytes arrayBlob 对象以及 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;