首页 > 解决方案 > sap.ui.unified.FileUploader 更改 http 方法/允许在 segw 上发布

问题描述

我正在处理 UI5 中的文件上传。我不能使用fileuploadvia 关联,因为在写入表之前我需要二进制文件。

问题是sap.ui.unified.FileUploader始终使用POSTHTTP 方法,这会导致后端系统出错:

405 Methode not allowed

我发现这个 SAP Blog FileUploader - 405 Method Not Allowed通过扩展控制和更改 HTTP 方法解决了这个问题。

我的问题是否有更标准的方法来实现这一目标?我没有在控件中找到任何属性来配置 HTTP 方法。

选项:

标签: file-uploadodatasapui5http-method

解决方案


使用 SEGW 上传/下载

上传前的二进制文件:只能通过 Defered 和 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  
    }
});

推荐阅读