在SAPUI5中上载文件并发送到网关服务器

在SAPUI5中上载文件并发送到网关服务器,sapui5,Sapui5,我很难找到一种方法来发送上传的文件并将其发送到网关服务器。我使用的是基本的FileUploader控件 ***<u:FileUploader id="fileUploader" name="myFileUpload" uploadUrl="upload/" width="400px" tooltip="Upload your file to the local server" uploa

我很难找到一种方法来发送上传的文件并将其发送到网关服务器。我使用的是基本的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"/>***
我应该在leuploader.upload()的之后添加什么代码才能有一个可以传递到OData设备附件属性的xstring


谢谢

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

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

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

oFileUploader.addHeaderParameter(new FileUploaderParameter({
    name: "x-csrf-token",
    value: _csrfToken
}));
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');
    }
});
slug
头参数可以以类似的方式设置,并且应该包含标识文件的内容,例如文件名或id

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

oFileUploader.addHeaderParameter(new FileUploaderParameter({
    name: "x-csrf-token",
    value: _csrfToken
}));
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');
    }
});

有了正确的头参数,将文件发送到正确配置的网关实体应该可以帮助您上传文件。

首先要做的是确保您拥有能够处理媒体类型和流的网关服务。要进行设置,您需要将处理文件内容的实体设置为媒体类型,并将处理流的逻辑设置到位(CREATE_STREAM)。您可以在中找到有关如何执行此操作的更多信息

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

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

oFileUploader.addHeaderParameter(new FileUploaderParameter({
    name: "x-csrf-token",
    value: _csrfToken
}));
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');
    }
});
slug
头参数可以以类似的方式设置,并且应该包含标识文件的内容,例如文件名或id

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

oFileUploader.addHeaderParameter(new FileUploaderParameter({
    name: "x-csrf-token",
    value: _csrfToken
}));
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');
    }
});

有了正确的头参数,将文件发送到正确配置的网关实体应该可以让您上传文件。

关于OData网关文件上传的精彩教科书解释!要是我刚才能有个清楚的解释就好了,这样我就不会浪费很多时间了:)谢谢罗宾。上传有点痛苦,恐怕会一直这样。幸运的是,Willard提到他正在使用SAP网关作为后端。如果您上传到例如Azure,则解决方案可能需要完全不同。幸运的是,这些控件提供了大量的可配置性,因此您可以处理后端系统的怪癖。但这可能会让那些刚开始使用这项技术的人更加困难。@jpenninkhof您如何将文档上传整合到一个批次中request@willardChingarande我宁愿不那样做。您想将其推送到批处理请求中有什么具体原因吗?@jpenninkhof其实没有。为了知识的目的。因此,我假设如果您需要上传文档,并且在同一个应用程序中执行一些与上传无关的操作,那么您将有两个单独的请求,一个是对所有其他请求的批处理请求,另一个是对OData Gateway文件上传的上传说明!要是我刚才能有个清楚的解释就好了,这样我就不会浪费很多时间了:)谢谢罗宾。上传有点痛苦,恐怕会一直这样。幸运的是,Willard提到他正在使用SAP网关作为后端。如果您上传到例如Azure,则解决方案可能需要完全不同。幸运的是,这些控件提供了大量的可配置性,因此您可以处理后端系统的怪癖。但这可能会让那些刚开始使用这项技术的人更加困难。@jpenninkhof您如何将文档上传整合到一个批次中request@willardChingarande我宁愿不那样做。您想将其推送到批处理请求中有什么具体原因吗?@jpenninkhof其实没有。为了知识的目的。因此,我假设如果您需要上传文档,并且在同一个应用程序中执行一些与上传无关的操作,那么您将有两个单独的请求,一个用于所有其他请求的批处理请求,另一个用于上传