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