Можно ли преобразовать объект uploadcollection в xstring? - PullRequest
0 голосов
/ 07 декабря 2018

Использование коллекции загрузки sapui5 для загрузки файлов во внешнем интерфейсе и последующей отправки их через ajax с запросом публикации ...

Мне нужно знать, как преобразовать возвращенный объект из элемента управления uploadcollection в xstring,тогда я могу отправить эту строку xstring (которая содержит содержимое файла) в sap-шлюз, используя метод post ajax.

Есть идеи, как мне это сделать?

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

Я пытаюсь сделать этот объект строкой xstring с помощью filereader:

                                                        //obtiene archivo
                                                        var file = files[i];

                                                        //Convierte archivo en binario
                                                        var reader = new FileReader();
                                                        reader.onload = function(readerEvt) {

                                                            var binaryString = readerEvt.target.result;
                                                            var base64 = btoa(binaryString);
                                                            var base64file; 

                                                            if(typeof base64file == "undefined" || typeof base64file == null){
                                                                base64file = base64; 
                                                            }else{
                                                              base64file = base64file +'new'+base64;
                                                            }
                                                        };
                                                        reader.readAsBinaryString(file);

                                                        console.log(file)

Но эта работа только с файлами типа image, другие, такие как pdf, .doc и т. Д., Выдают следующую ошибку, когда я пытаюсь отправить их с помощью ajax.

"Запрос служб данных не может быть понят из-за неправильного синтаксиса".

Есть идеи, как я могу отправить преобразовать эти файлы в данные xstring?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Я понял это, заполняя массив каждый раз, когда файл загружался через элемент управления,

                    change: function(oEvent) {


                        //Get file content
                        file = oEvent.getParameter("files")[0];

                        //Prepare data for slug
                        fixname = file.name;
                        filename = fixname.substring(0, fixname.indexOf("."));
                        extension = fixname.substring(fixname.indexOf(".") + 1);

                        //fill array with uploaded file
                        var fileData = {
                            file: file,
                            filename: filename,
                            extension: extension
                        }
                        fileArray.push(fileData);

                    },

, а затем я делал цикл над этим массивом, чтобы публиковать каждый отдельный файл, который я там храню, используя ajaxметод пост.

                                                $.each(fileArray, function(j, valor) {

                                                    //get file
                                                    file = fileArray[j].file;

                                                    //get file lenght
                                                    var numfiles = fileArray.length;


                                                    //Convert file to binary
                                                    var reader = new FileReader();
                                                    reader.readAsArrayBuffer(file); 
                                                    reader.onload = function(evt) {
                                                        fileString = evt.target.result; 

                                                        //get and make slug
                                                        filename = fileArray[j].filename;
                                                        extension = fileArray[j].extension;
                                                        slug = documento + '/' + filename + '/' + extension;


                                                        //User url service
                                                        var sUrlUpload = "sap url";
                                                        runs++;

                                                        //Post files
                                                        jQuery.ajax({});
                                                    }
                                                });
0 голосов
/ 09 декабря 2018

Посмотрите на этот пример.Надеюсь, это поможет.

Просмотр

<u:FileUploader change="onChange" fileType="pdf" mimeType="pdf" buttonText="Upload" />

Контроллер

convertBinaryToHex: function(buffer) {
        return Array.prototype.map.call(new Uint8Array(buffer), function(x) {
            return ("00" + x.toString(16)).slice(-2);
        }).join("");
    },


onChange: function(oEvent){
    var that = this;
    var reader = new FileReader();
    var file = oEvent.getParameter("files")[0];

    reader.onload = function(e) {
        var raw = e.target.result;
        var hexString = that.convertBinaryToHex(raw).toUpperCase(); 
        // DO YOUR THING HERE            
    };

    reader.onerror = function() {
        sap.m.MessageToast.show("Error occured when uploading file");
    };

    reader.readAsArrayBuffer(file);
},
...