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

如何在SharePoint 2013托管应用中实现从Azure Blob Storage下载文件

SharePoint 2013应用集成Azure Blob Storage下载功能实现方案

结合你现有技术栈,提供两种可直接落地的实现方案,按需选择即可:

方案一:前端JS直接调用Azure Blob下载(无服务端改动,适配纯JS场景)

无需修改现有WCF服务,纯前端即可完成对接,步骤如下:

  • 先在Azure Portal配置Blob容器的CORS规则:允许你的SharePoint站点域名的GET请求,允许请求头配置为*,暴露响应头新增Content-Disposition,最大缓存时效设为86400
  • 生成Blob访问SAS令牌:如果文件访问周期固定可直接在Azure后台生成只读权限、有效期匹配业务需求的固定SAS;如果需要动态管控权限,可在现有WCF服务中新增一个轻量接口,用Azure.Storage.Blobs包动态生成SAS返回给前端即可
  • 前端绑定下载按钮事件逻辑,示例代码如下:
document.querySelector('#downloadBtn').addEventListener('click', async function() {
  // 拼接Blob地址 + 提前获取的SAS令牌
  const blobFullUrl = 'https://<你的存储账户名>.blob.core.chinacloudapi.cn/<容器名>/<目标文件名>?<SAS令牌>';
  const res = await fetch(blobFullUrl);
  const fileBlob = await res.blob();
  // 生成临时a标签触发本地下载
  const tempLink = document.createElement('a');
  tempLink.href = window.URL.createObjectURL(fileBlob);
  // 替换为业务侧的实际文件名
  tempLink.download = '业务文件名.docx';
  document.body.appendChild(tempLink);
  tempLink.click();
  // 清理临时资源
  document.body.removeChild(tempLink);
  window.URL.revokeObjectURL(tempLink.href);
})
  • 注意事项:SAS令牌必须严格控制权限,仅开放只读权限,有效期不要超过业务需要的最长时间,避免泄露后被滥用

方案二:通过现有WCF服务代理下载(安全性更高,适合管控严格的场景)

复用你已有的C# WCF服务做中转,无需向暴露Blob的任何访问权限给前端,安全可控,步骤如下:

  • WCF服务端先引入Azure.Storage.Blobs NuGet包,将Azure存储账户连接字符串配置到WCF的配置文件中
  • 新增下载接口,入参为业务侧的文件唯一标识,返回文件流和对应响应头,核心逻辑示例:
[OperationContract]
[WebGet(UriTemplate = "DownloadFile?fileId={fileId}")]
public Stream DownloadFile(string fileId)
{
    // 第一步:做用户权限校验,确认当前登录的SharePoint用户有权限下载该文件
    if (!CheckUserPermission(HttpContext.Current.User.Identity.Name, fileId))
    {
        throw new WebFaultException(HttpStatusCode.Forbidden);
    }
    // 第二步:根据fileId从业务库查询对应的Blob容器名、Blob名、业务文件名
    var blobBusinessInfo = GetBlobInfoByFileId(fileId);
    // 第三步:连接Azure Blob获取文件流
    var blobClient = new BlobClient(ConfigurationManager.AppSettings["AzureBlobConnStr"], 
        blobBusinessInfo.ContainerName, blobBusinessInfo.BlobName);
    var downloadResult = blobClient.Download();
    // 第四步:设置响应头,触发浏览器下载
    HttpContext.Current.Response.ContentType = downloadResult.Value.Details.ContentType;
    HttpContext.Current.Response.Headers.Add("Content-Disposition", 
        $"attachment; filename={HttpUtility.UrlEncode(blobBusinessInfo.FileName)}");
    return downloadResult.Value.Content;
}
  • 前端直接调用WCF接口触发下载即可,无需额外处理Blob逻辑:
document.querySelector('#downloadBtn').addEventListener('click', function() {
  const targetFileId = '当前页面对应的业务文件ID';
  window.open(`${你的WCF服务根地址}/DownloadFile?fileId=${targetFileId}`, '_blank');
})
  • 优势:所有访问控制都在服务端完成,Blob可直接设置为不公开访问,无SAS泄露风险,还可扩展下载日志、流量管控等额外业务逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:24:01