Java 从数据库将PDF直接打开到用户的PDF应用程序中

Java 从数据库将PDF直接打开到用户的PDF应用程序中,java,mysql,javafx,Java,Mysql,Javafx,我已经使用JavaFX创建了一个应用程序。我有一个PDF被上传到数据库,因为它的设计是为了在以后查看,目的是使这个便携式(数据库和文件托管在服务器上) 目前,我的代码从存储在LongBLOB中的数据库中提取字节,并将其写入D:\驱动器上的文件 然后使用用户的默认PDF应用程序打开该文件 没有先写入文件就可以直接打开此文件吗?不希望用户必须先下载文件才能查看 以下是查看PDF代码: public void viewPdf(ActionEvent event) throws IOException,

我已经使用JavaFX创建了一个应用程序。我有一个PDF被上传到数据库,因为它的设计是为了在以后查看,目的是使这个便携式(数据库和文件托管在服务器上)

目前,我的代码从存储在LongBLOB中的数据库中提取字节,并将其写入D:\驱动器上的文件

然后使用用户的默认PDF应用程序打开该文件

没有先写入文件就可以直接打开此文件吗?不希望用户必须先下载文件才能查看

以下是查看PDF代码:

public void viewPdf(ActionEvent event) throws IOException, SQLException {
    byte[] pdf;
    Controller control = new Controller();
    Connection con = control.connectDB();
    PreparedStatement statement = con.prepareStatement("SELECT pdf, filename FROM files WHERE pdf_id =?");
    statement.setInt(1, pdfId);

    ResultSet rs = statement.executeQuery();
    if (rs.next()) {
        pdf = rs.getBytes("pdf");
        filename = rs.getString("filename");
        OutputStream newFile = new FileOutputStream("D:/pdfs/" + filename);
        newFile.write(fileBytes);
        newFile.close();

    }
    Desktop.getDesktop().open(new File("D:/pdfs/" + filename));
    statement.close();
    con.close();
}

您所做的是大多数浏览器PDF插件/PDF web阅读器所做的,他们将PDF文件写入一个临时位置,然后启动阅读器。@AhmedMasud是否可以在读取文件后删除该文件,因此当他们关闭文件(应用程序)时,需要再次写入?或者更可行的做法是考虑到未来,将路径放在数据库中,因为文件将托管在FTP服务器上?这取决于使用情况,如果读者经常访问的文件是静态的,并且在很长一段时间内不会更改内容,则将其留在数据库中(离线首先是一种良好的用户体验)。您在远程服务器上托管文件的计划解决了所有缓存问题。强烈建议为其使用SSL web服务器。因为它支持每个用户的身份验证/权限,并在可预见的未来提供强健的用户体验。OTH FTP往往充满安全隐患,应该避免,而且FTP没有“mime类型”支持,这与您的OP设计规范背道而驰。您所做的是大多数浏览器PDF插件/PDF web阅读器所做的,他们将PDF文件写入临时位置,然后启动读卡器。@AhmedMasud是否可以在读取文件后删除该文件,因此当他们关闭文件(应用程序)时,需要再次写入?或者更可行的做法是考虑到未来,将路径放在数据库中,因为文件将托管在FTP服务器上?这取决于使用情况,如果读者经常访问的文件是静态的,并且在很长一段时间内不会更改内容,则将其留在数据库中(离线首先是一种良好的用户体验)。您在远程服务器上托管文件的计划解决了所有缓存问题。强烈建议为其使用SSL web服务器。因为它支持每个用户的身份验证/权限,并在可预见的未来提供强健的用户体验。OTH FTP往往充满安全隐患,应该避免,而且FTP没有“mime类型”支持,这与OP设计规范背道而驰。