我正在UI5中上传文件。
我无法通过关联使用fileupload
,因为在写表之前我需要二进制文件。
问题是sap.ui.unified.FileUploader
始终使用POST
HTTP方法,
这会在后端系统中导致错误:
405 Methode not allowed
我发现了这个SAP博客FileUploader - 405 Method Not Allowed,其中的问题是通过扩展控件和更改HTTP方法来解决的。
我的问题是否有更标准的方法来实现?我在控件中找不到配置HTTP方法的任何属性。
选项:
POST
中允许SEGW
还是用户退出类?答案 0 :(得分:0)
使用SEGW上载/下载
上传之前的二进制文件:只能通过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
}
});
答案 1 :(得分:0)
这可能是由于UI5的浏览器支持。
文件上传器实际上是一个<div>
,其中包含一个<form>
。
可以通过 XMLHttpRequest (XHR)或仅提交表单来上传文件。表单仅支持GET
和POST
。
如果您想使用PUT
,第一步是设置sendXHR="true"
。
但是XHR在IE9中不起作用。然后出于某种原因,UI5开发人员决定:
如果IE9无法使用
PUT
,那么没有人可以使用!
因此,第二步是创建FileUploader的子类,为HTTP方法添加一个新属性并覆盖_sendFilesWithXHR
方法。这是标准配置;)
顺便说一句this是他们对其进行硬编码的行"POST"
,需要用动态调用新属性httpMethod
来代替。