【问题标题】:How can I send the POST request to the other server binding file into formdata如何将 POST 请求发送到其他服务器绑定文件到 formdata
【发布时间】:2017-12-01 12:00:51
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    1. 在我的本地服务器中,我创建了一个REST 服务。所需文件的哪个响应 base64 string
    2. 然后我从javaScript 拨打REST api 并作为回复收到base64 string。然后我将其转换为bytes arrayBlob 对象和File 对象。

      base64 字符串==>字节数组==>Blob 对象==>文件对象

      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;
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 2021-02-09
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      相关资源
      最近更新 更多