我的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上进行了测试。
在没有代理的情况下运行应用程序时,在开发模式下不会发生此错误。
请提供有关如何解决编码问题的建议。