【问题标题】: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 中)自动从物理位置获取文件对象。
- 在我的本地服务器中,我创建了一个
REST 服务。所需文件的哪个响应 base64 string。
-
然后我从javaScript 拨打REST api 并作为回复收到base64 string。然后我将其转换为bytes array 和Blob 对象和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;
};
-
最后我使用文件对象创建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;