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

文件名含单引号时,React应用通过API上传文件至SharePoint失败

SharePoint API上传含单引号文件名的解决方案

问题根源

SharePoint的OData URL语法中,单引号是字符串的边界分隔符,当文件名包含单引号时,直接使用encodeURIComponent编码会导致解析错误——因为编码后的%27会被解码回单引号,破坏URL的语法结构。

解决方案

方法一:转义URL中的单引号(适配原调用方式)

按照OData语法要求,将文件名中的单个单引号'替换为两个连续单引号'',再进行URI编码,这样SharePoint解析时会把''识别为字符串内部的一个单引号。

代码示例:

const filename = "File ' name.docx";
// 转义单引号
const escapedFilename = filename.replace(/'/g, "''");
// URI编码
const encodedFilename = encodeURIComponent(escapedFilename);
// 拼接API地址
const apiUrl = `${url}/_api/web/lists/getByTitle('ListTitle')/items('1')/AttachmentFiles(FileName='${encodedFilename}')`;

// 发起POST请求
.post(apiUrl, /* 请求体及配置 */)

方法二:通过请求体传递文件名(更推荐)

改用AttachmentFiles/add方法,将文件名放在JSON请求体中传递,避免在URL中处理特殊字符,JSON格式对单引号的支持更直接。

代码示例:

const filename = "File ' name.docx";
const apiUrl = `${url}/_api/web/lists/getByTitle('ListTitle')/items('1')/AttachmentFiles/add`;

// 构造请求体
const requestBody = JSON.stringify({
  '__metadata': { 'type': 'SP.AttachmentFile' },
  'FileName': filename
});

// 发起POST请求,注意设置正确的请求头
.post(apiUrl, requestBody, {
  headers: {
    'Content-Type': 'application/json;odata=verbose',
    // 补充你的授权头、Accept等必要配置
  }
})

说明

  • 不建议使用UTF编码替换单引号,这会改变文件名的实际内容,不符合需求。
  • 方法二的兼容性更好,也能避免其他特殊字符(如双引号、空格等)可能引发的URL语法问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:53:10