使用sapui5 uploadcollection在前端上传文件,然后通过ajax发送带有后期处理请求的文件...
我需要知道如何将返回的对象从uploadcollection控件转换为xstring,以便随后可以使用ajax post方法将该xstring(包含文件内容)发送到sap网关。
任何想法我该怎么做?
现在,我正在使用uploadcollection发送文件,一旦上传了附件,控件就会返回一个代表文件内容的对象。
我正在尝试通过使用filereader将此对象设置为xstring:
//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)
但是这仅适用于图像类型的文件,当我尝试使用ajax发送文件时,诸如pdf,.doc等的其他文件会出现以下错误。
“由于语法格式错误,无法理解数据服务请求”。
有什么主意,我该如何发送将这些文件转换为xstring数据?
答案 0 :(得分:0)
看看这个例子。希望这会有所帮助。
查看
<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);
},
答案 1 :(得分:0)
每次通过控件上传文件时,我都会通过填充数组来解决这个问题,
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方法post将我保存在其中的每个文件都发布到这里。
$.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({});
}
});