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

如何将AgilePoint表单签名URI转图片并保存至SharePoint列表?

解决方案:AgilePoint表单签名转图片并保存到SharePoint列表

步骤1:Data URI转Blob对象

签名绘图返回的是Data URI格式,需先转换为Blob二进制对象才能上传到SharePoint:

function dataURItoBlob(dataURI) {
  // 拆分MIME类型和Base64数据
  const [mimePart, dataPart] = dataURI.split(',');
  const mimeString = mimePart.split(':')[1].split(';')[0];
  // 解码Base64字符串
  const byteString = atob(dataPart);
  // 转换为ArrayBuffer
  const ab = new ArrayBuffer(byteString.length);
  const ia = new Uint8Array(ab);
  for (let i = 0; i < byteString.length; i++) {
    ia[i] = byteString.charCodeAt(i);
  }
  // 返回Blob对象
  return new Blob([ab], { type: mimeString });
}

步骤2:上传Blob到SharePoint列表

通过SharePoint REST API将Blob上传为列表项的附件,或上传到文档库后关联到列表字段:

上传为列表项附件

function uploadToSharePoint(blob, fileName, listName, itemId, spWebUrl) {
  // 先获取SharePoint请求摘要(用于验证请求)
  return fetch(`${spWebUrl}/_api/contextinfo`, {
    method: 'POST',
    headers: { 'Accept': 'application/json;odata=verbose' }
  })
  .then(res => res.json())
  .then(digestRes => {
    const digestValue = digestRes.d.GetContextWebInformation.FormDigestValue;
    // 构造上传附件的API端点
    const uploadEndpoint = `${spWebUrl}/_api/web/lists/getbytitle('${listName}')/items(${itemId})/attachmentfiles/add(FileName='${fileName}')`;
    
    return fetch(uploadEndpoint, {
      method: 'POST',
      headers: {
        'Accept': 'application/json;odata=verbose',
        'X-RequestDigest': digestValue,
        'Content-Type': blob.type
      },
      body: blob
    });
  })
  .then(uploadRes => uploadRes.json())
  .catch(error => console.error('上传失败:', error));
}

步骤3:整合到AgilePoint表单逻辑

修改你现有的代码,在获取签名URI后完成转换和上传:

function handleSignatureUpload() {
  const options = { fieldId: 'Drawing1' };
  
  eFormHelper.getFieldValue(options, function(result) {
    if (result.isSuccess) {
      const signatureURI = result.data;
      // 转换为Blob
      const signatureBlob = dataURItoBlob(signatureURI);
      
      // 配置SharePoint参数,替换为你的实际信息
      const spConfig = {
        spWebUrl: 'https://your-sharepoint-site-url', // 你的SP站点地址
        listName: '签名记录表', // 目标列表名称
        itemId: 1, // 要添加附件的列表项ID(新建项需先创建再获取ID)
        fileName: `签名_${new Date().getTime()}.png` // 自定义文件名,避免重复
      };
      
      // 执行上传
      uploadToSharePoint(signatureBlob, spConfig.fileName, spConfig.listName, spConfig.itemId, spConfig.spWebUrl)
        .then(res => {
          console.log('签名上传成功:', res);
          // 可添加用户提示或后续业务逻辑
        })
        .catch(err => {
          console.error('签名上传出错:', err);
        });
    } else {
      console.error('获取签名数据失败:', result.error);
    }
  });
}

关键注意事项

  • 权限配置:确保AgilePoint应用拥有访问目标SharePoint站点的权限,可通过Azure AD应用权限或SharePoint应用权限配置
  • 列表项ID:如果是新建列表项,需先调用SharePoint API创建项,获取返回的ID后再执行上传
  • 图片字段替代方案:若需将图片存入列表的「图片」字段,需先上传到站点资产库,再将图片URL存入字段,上传端点改为:${spWebUrl}/_api/web/getfolderbyserverrelativeurl('SiteAssets')/files/add(overwrite=true,url='${fileName}')

内容的提问来源于stack exchange,提问作者Shahar Hayoun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:40:11