Java setHeader不更改文件名

Java setHeader不更改文件名,java,playframework,hbase,Java,Playframework,Hbase,当我使用一个变量作为filename来设置下载文件的名称时,它并没有看到该变量。但是如果我不使用变量作为文件名,那么它会根据我的需要设置名称 response().setHeader(“内容处置”、“附件;文件名=testName.pdf”)通过这种方式,下载的文件名为testName.pdf 我尝试了三种不同的方法将其用于变量 response().setHeader(“内容处置”、“附件;文件名=“+filename.toString()+”.pdf”) 或 或 完整代码: public s

当我使用一个变量作为filename来设置下载文件的名称时,它并没有看到该变量。但是如果我不使用变量作为文件名,那么它会根据我的需要设置名称

response().setHeader(“内容处置”、“附件;文件名=testName.pdf”)
通过这种方式,下载的文件名为testName.pdf

我尝试了三种不同的方法将其用于变量

response().setHeader(“内容处置”、“附件;文件名=“+filename.toString()+”.pdf”)

完整代码:

public static Result download(String id) throws IOException {
        Get g = new Get(Bytes.toBytes(id));
        g.addColumn(Bytes.toBytes("content"), Bytes.toBytes("raw"));
        g.addColumn(Bytes.toBytes("book"), Bytes.toBytes("title"));

        HTable hTable = new HTable(hConn.config, "books");
        org.apache.hadoop.hbase.client.Result result = hTable.get(g);

        if (result.containsColumn(Bytes.toBytes("content"), Bytes.toBytes("raw"))){
            byte[] rawBook = result.getNoVersionMap().get(Bytes.toBytes("content")).get(Bytes.toBytes("raw"));
            byte[] fileName = result.getNoVersionMap().get(Bytes.toBytes("book")).get(Bytes.toBytes("title"));
            response().setContentType("application/octet-stream");
            response().setHeader("Content-disposition", "attachment; filename=\"" + fileName + "\".pdf");
            return ok(rawBook);
        }
        return notFound();
    }
这是来自Java Play框架。数据库是HBase。我有一个名为
books
的表,它有两个族
content
book
<代码>内容
包含pdf的内容(字节),
书籍
包含pdf的一些属性(标题、页码、作者等)<代码>行键对于
内容
书籍
是相同的


是否有其他方法通过使用变量设置文件名,或者我遗漏了什么

看起来问题在于将
字节[]
转换为
字符串。在该数组上执行一个简单的
toString()
,将导致类似
[B@186b085
-此处不接受该文件名

尝试将
字节[]
转换为
字符串
,如下所示:

String fn = new String(filename, "UTF-8");
请注意,编码始终很重要,但使用此构造函数,您必须捕获
不受支持的codingexception

在Java 8中,您可以使用以下命令,而不必捕获
不受支持的编码异常

String fn = new String(filename, java.nio.charset.StandardCharsets.UTF_8);

问题似乎是将
字节[]
转换为
字符串时出现的。在该数组上简单的
toString()
将导致类似
[B@186b085
-此处不接受该文件名

尝试将
字节[]
转换为
字符串
,如下所示:

String fn = new String(filename, "UTF-8");
请注意,编码始终很重要,但使用此构造函数,您必须捕获
不受支持的codingexception

在Java 8中,您可以使用以下命令,而不必捕获
不受支持的编码异常

String fn = new String(filename, java.nio.charset.StandardCharsets.UTF_8);

是的,你是对的,我正在[B@...非常感谢。是的,你是对的。我很高兴[B@...非常感谢你。