You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:38:40