在SAPUI5中上传文件并发送到Gateway服务器

时间:2016-08-10 19:05:59

标签: sapui5

我在尝试找出发送上传文件并将其发送到网关服务器的方法时遇到了困难。我正在使用基本的FileUploader控件。

    ***<u:FileUploader
        id="fileUploader"
        name="myFileUpload"
        uploadUrl="upload/"
        width="400px"
        tooltip="Upload your file to the local server"
        uploadComplete="handleUploadComplete"/>
    <Button
        text="Upload File"
        press="handleUploadPress"/>***

在控制器中我有以下事件处理程序

     ***handleUploadPress: function(oEvent) {
        var oFileUploader = this.getView().byId("fileUploader");
        oFileUploader.upload();
    }***

我应该在 oFileUploader.upload() 之后添加什么代码才能拥有一个xstring,我可以将其传递给我的OData srvice的附件属性

谢谢

1 个答案:

答案 0 :(得分:4)

要做的第一件事是确保您拥有能够处理媒体类型和流的网关服务。要进行此设置,您需要将处理文件内容的实体设置为媒体类型,并获取处理流的逻辑(CREATE_STREAM)。您可以在this SCN blog中找到有关如何执行此操作的详细信息。

在您的UI5应用程序中,您必须将上传控件的URL设置为例如/sap/opu/odata/sap/AWESOME_SERVICE/Customers('0000123456')/$value以便文件由您刚刚实现的CREATE_STREAM方法处理。

当最终发生上传时,您需要处理两个标头参数; slugCSRF token。 slug标题应设置为例如文件名,而需要使用飞行前请求检索CSRF令牌。要设置标题,您可以使用以下内容:

oFileUploader.addHeaderParameter(new FileUploaderParameter({
    name: "x-csrf-token",
    value: _csrfToken
}));

slug标头参数可以以类似的方式设置,并且应该包含标识文件的内容,例如文件名或ID。

要确定CSRF令牌,您可以执行以下操作:

var _csrfToken = "";
jQuery.ajax({
    url: "/sap/opu/odata/sap/AWESOME_SERVICE",
    headers: {
        "X-CSRF-Token": "Fetch",
        "X-Requested-With": "XMLHttpRequest",
        "DataServiceVersion": "2.0"
    },
    type: "GET",
    contentType: "application/json",
    dataType: 'json',
    success: function(data, textStatus, jqXHR) {
        _csrfToken = jqXHR.getResponseHeader('x-csrf-token');
    }
});

使用正确的标头参数,将文件发送到正确配置的网关实体应该可以上传文件。