对于AEM Forms中具有特殊字符的文件名,文件上传失败

当文件名包含特殊或Unicode字符时,通过AEM Forms On-prem 6.5中的自适应Forms进行的文件上传失败。 在使用自定义提交操作(通过云连接器将文件存储在Azure Blob存储中)提交多部分表单期间发生此问题。 在提交处理程序中进行文件提取期间,part.getName()等方法错误地将Unicode字符替换为“???”或“?”,从而中断文件名映射并阻止成功上传。

要解决此问题,请使用getSubmittedFileName()方法准确检索带有特殊字符的文件名,并确保向Azure Blob Storage的可靠上载。

描述 description

环境

  • 产品: AEM Forms
  • 版本: v6.5

问题/症状

  • 包含特殊字符的文件名显示为“???”或“?” 使用part.getName()检索时。
  • 如果文件名包含Unicode字符,request.getParts()方法不会返回所有附件。
  • 对于名称中包含特殊Unicode字符的文件,上传失败,特别是在提交多部分表单期间。
  • 文件名编码不正确会影响blob存储操作,从而阻止上载成功。

解决方法 resolution

要解决此问题,请更新文件上传逻辑以使用getSubmittedFileName()而不是getName()。 这可以确保正确检索和处理包含特殊或Unicode字符的文件名。 执行以下步骤:

  1. 在您的代码中将part.getName()的所有调用替换为part.getSubmittedFileName()。 此方法检索原始文件名,包括特殊或Unicode字符。

  2. 使用具有各种类型文件名的示例文件测试更新的代码,以确认行为正确。 例如,

    code language-none
    // Before (problematic) String filename = part.getName();     // After (fixed) String filename = part.getSubmittedFileName();
    
  3. 将更新后的代码部署到生产环境,并验证文件上传是否可以跨所有环境和平台工作。

进行此更改后,无论字符集如何,都会准确处理文件名,从而即使文件具有特殊或Unicode字符,也能成功上传。

相关阅读

《AEM 6.5用户指南》中的将资源导入和导出到AEM Forms

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f