2016-08-01 1 views
0

Я получаю 403 Запрещенную ошибку при попытке загрузить файл с помощью UploadCollection. Код в моем view.js является:не удалось загрузить файлы с помощью UploadCollection в SAPUI5

 var oOUpload = new sap.m.UploadCollection("oinspupload",{ 
     multiple : true, 
     sameFilenameAllowed : true, 
     instantUpload : false, 
     uploadUrl : "/sap/opu/odata/sap/ZACCBILL_SRV/FileSet", 
/*  uploadComplete : function(oEvent){ 
      //alert ("File Uploaded successfully"); 
     // oController.fileUpload(oEvent); 
     }, */ 
     fileDeleted : function(oEvent){ 
      oController.fileDelete(oEvent); 
     }, 
     fileRenamed : function(oEvent){ 
      alert ("File renamed successfully"); 
      //oController.fileRename(oEvent); 
     } 
    }); 

код в моем view.controller является:

  OData.request({ 
       requestUri : sServiceUrl, 
       method : "GET", 
       headers : 
       { 
        "X-Requested-With" : "XMLHttpRequest", 
        "Content-Type" : "application/atom+xml", 
        "DataServiceVersion" : "2.0", 
        "Authorization" : AuthToken, 
        "X-CSRF-Token" : "Fetch" 
       } 

      }, 
      function(data, response) { 
       debugger; 
       if(sap.ui.Device.browser.chrome || sap.ui.Device.browser.msie || sap.ui.Device.browser.safari){ 
        header_xcsrf_token = response.headers['x-csrf-token']; 
       }else if(sap.ui.Device.browser.firefox){ 
        header_xcsrf_token = response.headers['X-CSRF-Token']; 
       } 
       xcsrf_token_ref.header_xcsrf_token = header_xcsrf_token; 
       csrftoken = xcsrf_token_ref.header_xcsrf_token; 
      debugger; 
      uploadattachments(xcsrf_token_ref); 
      }, 
      function(err) { 
       debugger; 
       var request = err.request; // the request that was sent. 
       var response = err.response; // the response that was received. 
       alert("Error in Get -- Request " 
         + request + " Response " 
         + response); 
      }); 


    function uploadattachments(token){ 
debugger; 
    var uploader;   
     uploader= sap.ui.getCore().byId("oinspupload"); 

     var aItems = uploader.getItems(); 
      var slug, sequence; 
      for (i = 0; i < aItems.length; i++) { 
      sequence = i + 1; 
      slug = "CONTAINERID1000040100;STATUSIB;SEQUENCE" + sequence+   ";FILENAMECamera.png" ; 
    uploader.addHeaderParameter(new sap.m.UploadCollectionParameter({name: "slug", value: slug })); 
    debugger; 
    uploader.addHeaderParameter(new sap.m.UploadCollectionParameter({name: "X-Csrf-Token", value: token.header_xcsrf_token })); 

    uploader.upload(); 
} 
} 

Пожалуйста, не возражает недостающую скобку, как приведенный выше код не полный код ,

Приведенный выше код отлично работает с файловым загрузчиком. Я уверен, что проблема заключается в том, что uploadcollection не передает правильно выбранный токен CSRF, но я не могу понять, что не так.

+0

Кто-нибудь, кто поможет мне по этому вопросу? –

ответ

0

Наконец нашел решение сам с помощью следующего блога http://scn.sap.com/community/developer-center/front-end/blog/2016/03/29/using-the-uploadcollection-to-uploaddownload-archivelink-files-via-gateway

Загрузить Коллекция работает только с instantUpload, как верно и не работает с instantUpload как ложь от версии 1.32.X. UploadCollection является Buggy и еще не исправлен в будущих версиях. Кроме того, валидация токена CSRF должна выполняться в событии изменения. Ниже приведен код:

View.js

var oOUpload = new sap.m.UploadCollection("oinspupload",{ 
     multiple : true, 
     sameFilenameAllowed : false, 
     instantUpload : true, 
     uploadUrl : "/sap/opu/odata/sap/ZACCBILL_SRV/FileSet", 
     fileDeleted : function(oEvent){ 
      oController.fileDelete(oEvent); 
     }, 
     fileRenamed : function(oEvent){ 
      alert ("File renamed successfully"); 
     }, 
     change: function(oEvent) { 
      debugger; 
      csrftoken = xcsrf_token_ref.header_xcsrf_token; 
      var oUploadCollection = oEvent.getSource(); 
      var oCustomerHeaderToken = new sap.m.UploadCollectionParameter({ 
       name : "x-csrf-token", 
       value : csrftoken 
      }); 
      oUploadCollection.addHeaderParameter(oCustomerHeaderToken); 
     }, 
    }); 
0

Весь PARAMS заголовок должен быть добавлен с помощью функции "изменений". Если вы добавите его после этого, они не будут получены на Backend.

Также возможно загрузить файлы с помощью instantUpload = false. Вам нужно только связать параметр uploadUrl с параметром модели просмотра, и динамически он изменится при изменении URL-адреса.

Например:

Просмотр элемента:

<UploadCollection instantUpload="false" uploadUrl="{ResourceModel>/sServiceUrl}"/> 

Контроллер onInitFunction:

var resourcemodel = this.getOwnerComponent().getModel("ZGW_PURCHREQ_01_SRV"); 
var oDataResource = { 
    sServiceUrl: resourcemodel.sServiceUrl + "/FileSet" 
}; 
var jsonResource = new JSONModel(oDataResource); 
this.getView().setModel(jsonResource, "ResourceModel"); 

Когда вы запускаете загрузку, он пошлет петицию uploadUrl определяется на "sServiceUrl" из " ResourceModel».

Другой опция URL загрузки и/или новый Params заголовка перед тем функции противопожарной загрузки с:

var oUploadCollection = this.getView().byId("UploadCollection"); 
var sServiceUrl = resourcemodel.sServiceUrl + "/FileSet"; 
var headerBanfn = new sap.ui.unified.FileUploaderParameter({ 
    name: "banfn", 
    value: "123456" 
}); 
for (var i = 0; i < oUploadCollection._aFileUploadersForPendingUpload.length; i++) { 
    oUploadCollection._aFileUploadersForPendingUpload[i].setUploadUrl(sServiceUrl); 
    oUploadCollection._aFileUploadersForPendingUpload[i].addHeaderParameter(headerBanfn); 
} 
       oUploadCollection.upload(); 

Я надеюсь, что это было полезно.