休息 - 如何下载手机版PDF

时间:2015-11-16 12:34:53

标签: java android iphone pdf jax-rs

我只在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")具有相同的结果

2 个答案:

答案 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并不喜欢这样。我相信这就是为什么它不起作用。

我会尝试在手机上安装证书,然后重试。