【问题标题】:upload a file in SAPUI5 and send to Gateway server在 SAPUI5 中上传文件并发送到网关服务器
【发布时间】:2016-08-11 17:46:14
【问题描述】:

我很难找到一种方法来发送上传的文件并将其发送到网关服务器。我正在使用基本的 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() 之后添加什么代码来获得可以传递给我的 OData 服务的附件属性的 xstring

谢谢

【问题讨论】:

    标签: sapui5


    【解决方案1】:

    首先要做的是确保您拥有能够处理媒体类型和流的网关服务。要进行此设置,您需要将处理文件内容的实体设置为媒体类型,并获得处理流(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');
        }
    });
    

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

    【讨论】:

    • OData网关文件上传的优秀教材讲解!希望我不久前有这个明确的解释,这样可以节省我很多浪费的时间:)
    • 谢谢罗宾。上传有点痛苦,恐怕会保持这种状态。幸运的是,Willard 提到他正在使用 SAP Gateway 作为他的后端。如果您上传到例如,解决方案可能需要完全不同。天蓝色。幸运的是,这些控件提供了大量的可配置性,因此您可以处理后端系统的怪癖。但这可能会让那些刚开始使用这项技术的人更加困难。
    • @jpenninkhof 您如何将文件上传合并到批处理请求中
    • @willardChingarande 我不想那样做。您是否有特定原因要将其推送到批处理请求中?
    • @jpenninkhof 不是真的。出于知识目的。所以我假设如果您有上传文档的要求,并且您还在同一个应用程序中执行了一些与上传无关的操作,那么您将有两个单独的请求,一个用于所有其他请求的批处理请求,一个用于上传
    猜你喜欢
    • 1970-01-01
    • 2013-10-29
    • 2015-11-07
    • 2013-09-24
    • 1970-01-01
    • 2016-11-25
    • 2014-04-09
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多