我只在android和iphone上测试了这个。
我们有一个Web应用程序,用户可以在其中下载pdf文件 这适用于笔记本电脑,但是当我按下Android或iPhone上的链接时,下载就开始了,但是pdf永远不会显示或下载。
我在Content-Disposition Header中尝试了很多不同的变体,但到目前为止还没有任何变体。
有什么想法吗?
@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response showPDF(@Context HttpServletRequest httpRequest) {
byte[] dokument = somePDF();
return Response.ok(dokument)
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM)
.header(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=\"kvittering.PDF\"")
.header(HttpHeaders.CONTENT_LENGTH, dokument.length)
.build();
}
我尝试了所有这些,但行为相同:
.header(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=\"kvittering.PDF\"")
.header(HttpHeaders.CONTENT_DISPOSITION,"inline;filename=\"kvittering.PDF\"")
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"kvittering.PDF\"")
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"kvittering.PDF\"")
.header(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=kvittering.pdf")
我也试过了
@Produces("application/pdf")
具有相同的结果
答案 0 :(得分:0)
所以here你有关于mkyong
的教程主要区别似乎是@Produces注释设置
@Produces("application/pdf")
完整代码:
import java.io.File;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
@Path("/pdf")
public class PdfService {
private static final String FILE_PATH = "c:\\Android-Book.pdf";
@GET
@Path("/get")
@Produces("application/pdf")
public Response getFile() {
File file = new File(FILE_PATH);
ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition",
"attachment; filename=new-android-book.pdf");
return response.build();
}
}
对我来说,这是有效的,但下载是一个xml文件,因此我使用:
@Produces("application/xml")
答案 1 :(得分:0)
我想我们已经明白了。虽然Haven尚未对其进行验证,但会在验证后发布答案并接受。
我们的登台服务器似乎使用了无效的ssl证书,而android并不喜欢这样。我相信这就是为什么它不起作用。
我会尝试在手机上安装证书,然后重试。