首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可以控制来自Jersey Rest服务的响应的文件名吗?

可以控制来自Jersey Rest服务的响应的文件名吗?
EN

Stack Overflow用户
提问于 2011-03-16 05:12:06
回答 4查看 16K关注 0票数 20

目前,我在Jersey有一个方法,可以从内容存储库中检索文件并将其作为响应返回。该文件可以是jpeg、gif、pdf、docx、html等(基本上是任何格式)。然而,目前我不知道如何控制文件名,因为每个文件都会以(download.file扩展名,即(download.jpg,download.docx,download.pdf) )名称自动下载。有没有办法设置文件名?我已经有一个字符串,但我不知道如何设置响应,使它显示的文件名,而不是默认的“下载”。

代码语言:javascript
复制
@GET
@Path("/download/{id}")
public Response downloadContent(@PathParam("id") String id)
{
    String serverUrl = "http://localhost:8080/alfresco/service/cmis";
    String username = "admin";
    String password = "admin";

    Session session = getSession(serverUrl, username, password);

    Document doc = (Document)session.getObject(session.createObjectId(id));

    String filename = doc.getName();

    ResponseBuilder rb = new ResponseBuilderImpl();

    rb.type(doc.getContentStreamMimeType());
    rb.entity(doc.getContentStream().getStream());

    return rb.build();
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-16 08:09:48

您可以将"Content-Disposition header"添加到响应中,例如

代码语言:javascript
复制
rb.header("Content-Disposition",  "attachment; filename=\"thename.jpg\"");
票数 27
EN

Stack Overflow用户

发布于 2013-04-23 22:47:24

还有一种更好的方式,使用Jersey提供的ContentDisposition类,这种方式更安全:

代码语言:javascript
复制
ContentDisposition contentDisposition = ContentDisposition.type("attachment")
    .fileName("filename.csv").creationDate(new Date()).build();

 return Response.ok(
            new StreamingOutput() {
                @Override
                public void write(OutputStream outputStream) throws IOException, WebApplicationException {
                    outputStream.write(stringWriter.toString().getBytes(Charset.forName("UTF-8")));
                }
            }).header("Content-Disposition",contentDisposition).build();
票数 30
EN

Stack Overflow用户

发布于 2014-08-05 14:03:12

在不使用ResponseBuilder类的情况下,可以直接在响应上设置头部,这样就避免了任何额外的依赖关系:

代码语言:javascript
复制
return Response.ok(entity).header("Content-Disposition", "attachment; filename=\"somefile.jpg\"").build();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5318132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档