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

使用C#上传带下划线PDF至S3后,分发URL在Chrome/Edge无法打开

解决S3分发URL无法打开含下划线文件名的PDF问题(仅Chrome/Edge)

以下是针对该问题的排查和解决步骤:

  • 检查并修正Content-Disposition响应头
    Chrome和Edge对带特殊字符(如下划线)的文件名处理更严格,代码上传时需正确编码文件名后设置该头,而非仅依赖默认值。替换手动设置Content-Type的代码,添加符合RFC 5987标准的编码头:

    var putRequest = new PutObjectRequest
    {
        BucketName = "你的存储桶名称",
        Key = "带有下划线的文件名.pdf",
        FilePath = "本地文件路径",
        ContentType = "application/pdf",
        Headers = 
        {
            { "Content-Disposition", $"inline; filename*=UTF-8''{Uri.EscapeDataString("带有下划线的文件名.pdf")}" }
        }
    };
    // 执行上传
    await s3Client.PutObjectAsync(putRequest);
    

    这里用inline确保浏览器直接打开文件;filename*是标准编码方式,兼容现代浏览器。

  • 验证CloudFront缓存(若使用分发服务)

    1. 检查CloudFront的缓存策略,确保Content-Type、Content-Disposition等响应头被正确转发到客户端,未被过滤。
    2. 手动清理CloudFront的边缘缓存,避免旧的错误响应持续生效。
  • 对比手动上传与代码上传的元数据差异
    登录AWS控制台查看S3对象的元数据,对比手动上传和代码上传的文件:

    • 确认Content-Type均为application/pdf
    • 检查是否存在额外的元数据(如Content-Encoding),代码上传可能误设置了gzip等编码,导致Chrome解析失败。
  • 确认分发URL的文件名编码
    虽然下划线属于URL安全字符,但部分分发服务可能对文件名的处理存在差异,确保生成的分发URL中文件名部分未被错误转义或截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:03:20