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

尝试为SharePoint列表添加附件时遭遇403 Forbidden错误求助

解决SharePoint列表添加附件时的403(FORBIDDEN)错误

你遇到的403禁止错误,主要是API请求的语法问题加上SharePoint的特殊验证要求导致的,我帮你梳理下修复方案:

先看你的原HTML代码:

<html> 
  <input id="uploadFile" type="file"> 
  <input type="button" onclick="AddAttachments(1)" value="Add Attachments"> 
</html>

报错的请求URL里藏着一个明显的语法问题:

POST http://siteurl/_api/web/lists/getbytitle ('DocUploadTest')/items(1)/AttachmentFiles/add(FileName='Test.txt') 403 (FORBIDDEN)

关键问题分析&修复点

  1. API URL语法错误
    你写的getbytitle ('DocUploadTest')多了一个空格!OData路径要求getbytitle和括号之间不能有空格,正确写法是getbytitle('DocUploadTest')。这个语法错误会导致SharePoint无法解析API路径,直接返回类似权限禁止的错误。

  2. 缺少X-RequestDigest验证头
    SharePoint的所有POST/PUT/DELETE请求都必须携带X-RequestDigest头来防止CSRF攻击,没有这个头的话,服务器会直接返回403。你需要先从/_api/contextinfo接口获取这个验证值,再用它发起上传请求。

  3. 文件数据传递方式不对
    上传文件必须用FormData封装,同时要告诉jQuery不要自动处理数据格式,否则会导致文件内容被错误编码,服务器无法识别。

修正后的完整代码

<html>
  <input id="uploadFile" type="file">
  <input type="button" onclick="AddAttachments(1)" value="Add Attachments">
  <script src="http://siteName/SiteAssets/ScriptFiles/jquery.min.js"></script>
  <script>
    function AddAttachments(itemId) {
      // 先检查是否选择了文件
      var fileInput = document.getElementById('uploadFile');
      var selectedFile = fileInput.files[0];
      if (!selectedFile) {
        alert('请先选择要上传的文件哦');
        return;
      }

      // 获取SharePoint的RequestDigest验证值
      $.ajax({
        url: _spPageContextInfo.webAbsoluteUrl + "/_api/contextinfo",
        method: "POST",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function(contextData) {
          var requestDigest = contextData.d.GetContextWebInformation.FormDigestValue;
          // 拿到验证值后发起上传请求
          uploadFileToAttachment(requestDigest, itemId, selectedFile);
        },
        error: function(err) {
          console.log('获取验证信息失败:', err);
        }
      });
    }

    function uploadFileToAttachment(digest, itemId, file) {
      // 修正后的API URL,去掉了getbytitle后面的空格
      var apiEndpoint = _spPageContextInfo.webAbsoluteUrl + 
        "/_api/web/lists/getbytitle('DocUploadTest')/items(" + itemId + ")/AttachmentFiles/add(FileName='" + file.name + "')";

      // 用FormData封装文件
      var formData = new FormData();
      formData.append('file', file);

      $.ajax({
        url: apiEndpoint,
        method: "POST",
        headers: {
          "Accept": "application/json; odata=verbose",
          "X-RequestDigest": digest // 必须携带的验证头
        },
        processData: false, // 禁止jQuery处理FormData
        contentType: false, // 让浏览器自动设置正确的Content-Type
        data: formData,
        success: function(response) {
          alert('附件上传成功啦!');
          console.log('上传详情:', response);
        },
        error: function(xhr, status, err) {
          console.log('上传失败:', xhr.responseText);
        }
      });
    }
  </script>
</html>

额外注意事项

  • 权限检查:确保当前登录用户对DocUploadTest列表有编辑列表项和添加附件的权限,如果权限不足,即使代码正确也会返回403。
  • _spPageContextInfo可用性:这段代码依赖SharePoint页面自带的_spPageContextInfo对象,如果是在独立HTML页面使用,可能需要手动传入站点URL,或者确保页面在SharePoint环境中加载。

内容的提问来源于stack exchange,提问作者saumya bhargava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:40:22