如何在sap.m.UploadCollection中获取文件路径或二进制内容
获取SAP UI5 UploadCollection的文件二进制内容
嘿,你完全不用纠结文件路径的问题——浏览器出于安全限制,根本不允许网页获取本地文件的完整路径,所以这条路走不通。不过别担心,UploadCollection本身就给你提供了直接获取文件二进制内容的方式,不用绕路找路径!
核心思路:利用事件中的File对象
UploadCollection的多个事件(比如change、beforeUploadStarts)都会传递选中的文件对应的原生File对象,你可以直接用这个对象通过FileReader读取二进制内容。
方法一:在beforeUploadStarts事件中处理(上传前获取)
这个事件会在每个文件开始上传前触发,你可以在这里拿到对应的File对象并读取内容:
onBeforeUploadStarts: function(oEvent) { const oFile = oEvent.getParameter("getFile"); // 获取当前要上传的File对象 const oReader = new FileReader(); // 读取为ArrayBuffer(二进制原始数据) oReader.onload = function(e) { const arrayBuffer = e.target.result; // 这里可以处理二进制内容,比如转成Uint8Array,或者直接用于后续逻辑 console.log("文件二进制内容(ArrayBuffer):", arrayBuffer); }; oReader.readAsArrayBuffer(oFile); // 如果需要Base64格式,用readAsDataURL // oReader.readAsDataURL(oFile); }
方法二:在change事件中处理(用户选择文件后立即获取)
如果想在用户刚选完文件就拿到内容,不用等上传触发,可以用change事件:
onChange: function(oEvent) { const aFiles = oEvent.getParameter("files"); // 获取所有选中的文件数组 aFiles.forEach(oFile => { const oReader = new FileReader(); oReader.onload = function(e) { const binaryContent = e.target.result; console.log(`文件 ${oFile.name} 的二进制内容:`, binaryContent); // 这里可以把内容存储到模型或者变量里备用 }; oReader.readAsArrayBuffer(oFile); }); }
注意事项
FileReader是异步操作,所以要在onload回调里处理结果,不能直接在调用readAsArrayBuffer后就获取内容。- 如果需要处理大文件,要注意内存占用,必要时可以考虑分片读取。
- 你的UploadCollection已经开启了
instantUpload="true",所以beforeUploadStarts会在文件选中后立刻触发,刚好适合在这个时机获取内容。
这样你就完全不需要依赖文件路径,直接拿到二进制内容啦!
内容的提问来源于stack exchange,提问作者Dorien De Wallen
相关产品推荐
相关产品推荐

