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

使用Azure TypeScript SDK上传PDF时遇无效HTTP Header错误求助

上传PDF到Azure Blob Storage时出现“Invalid HTTP Header”错误排查

问题场景

使用Azure TypeScript SDK v12.24.0上传PDF文档至Blob Storage,已确认权限正常(xlsx、csv、png等格式均可正常上传),但上传PDF时触发**"Invalid HTTP Header"**错误。

相关代码

const blockBlobClient: BlockBlobClient = this.azureClient.getBlockBlobClient(store.key);
await blockBlobClient.uploadStream(readStream, undefined, undefined, {
  blobHTTPHeaders: {
    blobContentType: 'application/pdf',
  },
  onProgress: (progress) => {
    this.logger.debug(progress);
  }
}).catch((error) => {
  this.logger.error(`Error uploading to Azure Blob Storage: ${error.message}`);
  throw new Error(`Failed to upload file to Azure: ${error.message}`);
});
this.logger.debug(`"${store.key}" uploaded to Azure Blob storage.`);
} else {
  throw new Error("No client found");
}

环境信息

  • Node: v22.2.0
  • Browser: Arc
  • SDK: @azure/storage-blob v12.24.0

可能原因及解决方案

1. Blob名称包含非法字符

Azure Blob存储对Blob名称有严格字符限制,禁止使用控制字符、\ / : * ? " < > |等特殊符号。如果PDF对应的store.key包含这些非法字符,会导致SDK构造HTTP请求头时异常,而其他格式文件名刚好符合规则。

解决方案:
检查并清理store.key,移除所有非法字符,例如将特殊符号替换为下划线或其他合法字符。

2. SDK版本的已知bug

Azure SDK for JS v12.24.0的uploadStream方法存在与特定Content-Type处理相关的HTTP头构造问题,社区已有相关反馈,application/pdf类型可能触发该bug。

解决方案:

  • 降级SDK到v12.23.0,或升级到v12.25.0及以上版本;
  • 临时替换上传方法,改用uploadData(将流转换为Buffer后上传),示例代码如下:
// 将readStream转换为Buffer
const buffer = await new Promise<Buffer>((resolve, reject) => {
  const chunks: Uint8Array[] = [];
  readStream.on('data', (chunk) => chunks.push(chunk));
  readStream.on('end', () => resolve(Buffer.concat(chunks)));
  readStream.on('error', reject);
});

const blockBlobClient: BlockBlobClient = this.azureClient.getBlockBlobClient(store.key);
await blockBlobClient.uploadData(buffer, {
  blobHTTPHeaders: {
    blobContentType: 'application/pdf',
  },
  onProgress: (progress) => {
    this.logger.debug(progress);
  }
}).catch((error) => {
  this.logger.error(`Error uploading to Azure Blob Storage: ${error.message}`);
  throw new Error(`Failed to upload file to Azure: ${error.message}`);
});

3. 流处理异常导致头构造错误

PDF文件的读取流可能包含异常字节,导致SDK在解析流并构造请求头时出错,而其他格式的流结构不会触发该问题。

解决方案:

  • 验证PDF文件本身是否损坏,尝试用其他工具打开确认文件完整性;
  • 显式指定请求头,在上传配置中额外添加headers参数强制设置Content-Type:
await blockBlobClient.uploadStream(readStream, undefined, undefined, {
  blobHTTPHeaders: {
    blobContentType: 'application/pdf',
  },
  headers: {
    'Content-Type': 'application/pdf'
  },
  onProgress: (progress) => {
    this.logger.debug(progress);
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:06:00