目前,我在Jersey有一个方法,可以从内容存储库中检索文件并将其作为响应返回。该文件可以是jpeg、gif、pdf、docx、html等(基本上是任何格式)。然而,目前我不知道如何控制文件名,因为每个文件都会以(download.file扩展名,即(download.jpg,download.docx,download.pdf) )名称自动下载。有没有办法设置文件名?我已经有一个字符串,但我不知道如何设置响应,使它显示的文件名,而不是默认的“下载”。
@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();
}
发布于 2011-03-16 08:09:48
您可以将"Content-Disposition
header"添加到响应中,例如
rb.header("Content-Disposition", "attachment; filename=\"thename.jpg\"");
发布于 2013-04-23 22:47:24
还有一种更好的方式,使用Jersey提供的ContentDisposition
类,这种方式更安全:
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();
发布于 2014-08-05 14:03:12
在不使用ResponseBuilder类的情况下,可以直接在响应上设置头部,这样就避免了任何额外的依赖关系:
return Response.ok(entity).header("Content-Disposition", "attachment; filename=\"somefile.jpg\"").build();
https://stackoverflow.com/questions/5318132
复制相似问题