sap.ui.unified.FileUploader 更改 http 方法/允许 post 在 segw 上
sap.ui.unified.FileUploader change http methode / allow post on segw
我正在 UI5 中上传文件。
我无法通过关联使用 fileupload
,因为在写入 table.
之前我需要二进制文件
问题是 sap.ui.unified.FileUploader
总是使用 POST
HTTP 方法,
这会导致后端系统出错:
405 Methode not allowed
我找到了这个 SAP 博客 FileUploader - 405 Method Not Allowed,其中通过扩展控件和更改 HTTP 方法解决了问题。
我的问题是有更标准的方法来实现吗?我没有在控件中找到任何配置HTTP方法的属性。
选项:
- 也许在 XHR 设置中?
- 能否允许
POST
进入 SEGW
或用户退出 类?
Upload/Download 与 SEGW
- Step by Step on how to use the SAPUI5 file upload feature
- File Upload/Download through NetWeaver Gateway
- Uploading Files to SAP GW, Downloading Files from SAP GW – New Techniques
- 最新博客!!:Upload/download File in SAP UI5 Application using Gateway
上传前的二进制文件:只能通过 Deffered 和 XHR 实现
getBase64Promise: function (file) {
return new Promise(function (resolve, reject) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function () {
var encoded = reader.result.replace("data:", "").replace(/^.*;base64,/, "");
if ((encoded.length % 4) > 0) {
encoded += "=".repeat(4 - (encoded.length % 4));
}
resolve(encoded);
};
reader.onerror = function () {
reject("error");
};
});
},
fileUploadChange: function (oControlEvent) {
var that = this;
var aFiles = oControlEvent.getParameters().files;
var currentFile = aFiles[0];
var sUrl = "yourNeeds..";
this.getBase64Promise(currentFile).then(function (data) {
that.xhrRequest(data, oView, sUrl);
});
},
xhrRequest: function (data, oView, url) {
var oImage = "data:image/png;base64, " + data;
oRequest = JSON.stringify(oImage);
var xhrReadyStateChange = function () {
if (this.readyState === this.DONE) {
console.log("200", JSON.parse(this.response));
}
};
var xhr = new XMLHttpRequest();
xhr.withCredentials = false;
xhr.addEventListener("readystatechange", xhrReadyStateChange);
xhr.open("POST", url, false); // setting request method & API endpoint, the last parameter is to set the calls as synchyronous
xhr.setRequestHeader("Accept", "application/json"); // adding request headers
xhr.setRequestHeader("Content-Type", "application/json"); // adding request headers
xhr.send(oRequest); // sending request
}
});
这可能是因为浏览器支持 UI5。
在幕后,文件上传器是一个 <div>
,其中包含一个 <form>
。
可以通过 XMLHttpRequest (XHR) 或简单地提交表单来上传文件。表单仅支持 GET
和 POST
.
如果你想使用PUT
第一步设置sendXHR="true"
.
但是 XHR 在 IE9 中不工作。出于某种原因,UI5 开发人员随后决定:
If IE9 cannot use PUT
then no one should!
所以第二步是创建一个FileUploader的子类,为HTTP方法添加一个新的属性并覆盖_sendFilesWithXHR
方法。这是最标准的 ;)
Btw this 是他们硬编码的行 "POST"
需要用新的动态调用替换 属性 httpMethod
.
我正在 UI5 中上传文件。
我无法通过关联使用 fileupload
,因为在写入 table.
问题是 sap.ui.unified.FileUploader
总是使用 POST
HTTP 方法,
这会导致后端系统出错:
405 Methode not allowed
我找到了这个 SAP 博客 FileUploader - 405 Method Not Allowed,其中通过扩展控件和更改 HTTP 方法解决了问题。
我的问题是有更标准的方法来实现吗?我没有在控件中找到任何配置HTTP方法的属性。
选项:
- 也许在 XHR 设置中?
- 能否允许
POST
进入SEGW
或用户退出 类?
Upload/Download 与 SEGW
- Step by Step on how to use the SAPUI5 file upload feature
- File Upload/Download through NetWeaver Gateway
- Uploading Files to SAP GW, Downloading Files from SAP GW – New Techniques
- 最新博客!!:Upload/download File in SAP UI5 Application using Gateway
上传前的二进制文件:只能通过 Deffered 和 XHR 实现
getBase64Promise: function (file) {
return new Promise(function (resolve, reject) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function () {
var encoded = reader.result.replace("data:", "").replace(/^.*;base64,/, "");
if ((encoded.length % 4) > 0) {
encoded += "=".repeat(4 - (encoded.length % 4));
}
resolve(encoded);
};
reader.onerror = function () {
reject("error");
};
});
},
fileUploadChange: function (oControlEvent) {
var that = this;
var aFiles = oControlEvent.getParameters().files;
var currentFile = aFiles[0];
var sUrl = "yourNeeds..";
this.getBase64Promise(currentFile).then(function (data) {
that.xhrRequest(data, oView, sUrl);
});
},
xhrRequest: function (data, oView, url) {
var oImage = "data:image/png;base64, " + data;
oRequest = JSON.stringify(oImage);
var xhrReadyStateChange = function () {
if (this.readyState === this.DONE) {
console.log("200", JSON.parse(this.response));
}
};
var xhr = new XMLHttpRequest();
xhr.withCredentials = false;
xhr.addEventListener("readystatechange", xhrReadyStateChange);
xhr.open("POST", url, false); // setting request method & API endpoint, the last parameter is to set the calls as synchyronous
xhr.setRequestHeader("Accept", "application/json"); // adding request headers
xhr.setRequestHeader("Content-Type", "application/json"); // adding request headers
xhr.send(oRequest); // sending request
}
});
这可能是因为浏览器支持 UI5。
在幕后,文件上传器是一个 <div>
,其中包含一个 <form>
。
可以通过 XMLHttpRequest (XHR) 或简单地提交表单来上传文件。表单仅支持 GET
和 POST
.
如果你想使用PUT
第一步设置sendXHR="true"
.
但是 XHR 在 IE9 中不工作。出于某种原因,UI5 开发人员随后决定:
If IE9 cannot use
PUT
then no one should!
所以第二步是创建一个FileUploader的子类,为HTTP方法添加一个新的属性并覆盖_sendFilesWithXHR
方法。这是最标准的 ;)
Btw this 是他们硬编码的行 "POST"
需要用新的动态调用替换 属性 httpMethod
.