gpt4 book ai didi

java - setHeader 不改变文件名

转载 作者:行者123 更新时间:2023-12-02 03:42:30 24 4
gpt4 key购买 nike

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

response().setHeader("Content-disposition", "attachment; filename=testName.pdf"); 这样,下载的文件名为 testName.pdf

我尝试了三种不同的方法来将它与变量一起使用。

response().setHeader("Content-disposition", "attachment; filename="+ fileName.toString() +".pdf");

..... "attachment; filename="+ fileName +".pdf");

..... "attachment; filename="+ 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 Framework。数据库是HBase。我有一个名为 books 的表,它有两个系列 contentbookcontent 包含 pdf 的内容(以字节为单位), book 包含 pdf 的一些属性(标题、页码、作者等)。 contentbookRow Key 是相同的。

是否有另一种方法通过使用变量来设置文件名,或者我遗漏了什么?

最佳答案

看起来问题在于将byte[]转换为String。该数组上的一个简单的 toString() 将导致类似 [B@186b085 - AFAIK 不接受这里作为文件名

尝试将 byte[] 转换为 String,如下所示:

String fn = new String(filename, "UTF-8");

请注意,编码始终很重要,但使用此构造函数时,您必须捕获UnsupportedEncodingException

在 Java 8 中,您可以使用以下方法,而无需捕获 UnsupportedEncodingException:

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

关于java - setHeader 不改变文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36680949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com