在Play框架中上传文件时,文件名中的特殊字符

时间:2019-03-13 13:23:38

标签: apache playframework character-encoding mod-proxy

我的Play Framework 2.7应用程序在Apache代理后面运行。该应用程序提供了上传文件的功能,并将原始文件名保存在MySQL数据库中(同时将源文件重命名为随机UUID)。

该内容以UTF-8的形式提供给浏览器,带有一个<meta charset="utf-8">标头标记。 MySQL数据库是具有utf-8编码的InnoDB。

在后端接收文件时,我使用如下代码获取文件名(如Play文档所推荐):

request.body.file("file").map { file =>
  val fileName = Paths.get(file.filename).getFileName.toString
  ...
}

如果我上传了一个名为“Skärmavbild.png”的文件,并且该文件是通过Safari上传的,则“ä”的编码正确并保存到了数据库中。但是,如果文件是通过Chrome或Firefox上传的,则文件名将变为“ Ska?rmavbild.png”。 Chrome和Firefox已在Mac和Windows上进行了测试。

在没有代理的情况下运行应用程序时,在开发模式下不会发生此错误。

请提供有关如何解决编码问题的建议。

0 个答案:

没有答案