Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过远程方法调用上传和下载文件_Java_Network Programming_Rmi - Fatal编程技术网

Java 通过远程方法调用上传和下载文件

Java 通过远程方法调用上传和下载文件,java,network-programming,rmi,Java,Network Programming,Rmi,我花了一整天的时间研究我的客户如何从服务器数据库上传和下载文件。当服务器和客户机在同一台机器上运行时,我的代码可以正常工作,但当客户机和服务器在不同的机器上运行时,一切都变得一团糟。这是我为学校做的项目,因此任何人都可以帮助我如何实施该项目。我在互联网上搜索了又搜索,但我自己的努力没有找到解决方案,我看到了一些,但它们与servlet和jsp相关。我需要作为一个桌面应用程序来做这件事。有关我的代码的一些信息,请点击这里 用于下载的服务器实现: public synchronized void d

我花了一整天的时间研究我的客户如何从服务器数据库上传和下载文件。当服务器和客户机在同一台机器上运行时,我的代码可以正常工作,但当客户机和服务器在不同的机器上运行时,一切都变得一团糟。这是我为学校做的项目,因此任何人都可以帮助我如何实施该项目。我在互联网上搜索了又搜索,但我自己的努力没有找到解决方案,我看到了一些,但它们与servlet和jsp相关。我需要作为一个桌面应用程序来做这件事。有关我的代码的一些信息,请点击这里

用于下载的服务器实现:

public synchronized void downloadFile(Object row) throws RemoteException {
    try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String database = "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+path+".accdb;";
        dbConn = DriverManager.getConnection(database, "", "");
        ps = dbConn.prepareStatement("SELECT * FROM File WHERE ID = ?");
        ps.setString(1, row.toString());
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            InputStream is;
            FileOutputStream fos;
            try {
                is = rs.getBinaryStream("FileSize");
                fos = new FileOutputStream(new File("C:/" +rs.getString("FileName")));
                int bytesRead;
                while ((bytesRead = is.read()) != -1) {
                    fos.write(c);
                }
                is.close();
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    ps.close();
    dBConn.close();

}
下面是我的actionlistener下载按钮:

if (source.equals(downloadB)) {
            try {
                if (fileTable.getSelectedRow() == -1) {
                    JOptionPane.showMessageDialog(null, "No file to be download", "Error", JOptionPane.ERROR_MESSAGE);
                } else {
                    s.downloadFile(fileTable.getValueAt(fileTable.getSelectedRow(), 0));
                    JOptionPane.showMessageDialog(null, "Download Successful", "Information", JOptionPane.INFORMATION_MESSAGE);
                }
            } catch (RemoteException re) {
                JOptionPane.showMessageDialog(null, "Error downloading file", "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
我的数据库包含以下内容:

ID:自动编号

文件名:文本


FileSize:OLE对象

您没有通过rmi实现远程文件加载,而是实现了一个远程调用,将数据库文件复制到(服务器的)本地文件系统。除非您的客户机可以访问服务器的文件系统,否则这是行不通的。您需要通过rmi实际发送文件字节。

上传和下载都应该使用字节[]编码?谢谢你的邀请enlightenment@MaricrisCarbonel-是的,这是一个简单的解决方案(对于家庭作业来说很好)。但是,对于生产代码,您永远不会希望这样做,因为这将导致大型文件的内存问题。您可以使用在rmi上传输数据,以实现更强健的实现。path的值是什么?path的值只是数据库所在的路径。将该文件共享给所有用户,并使用UNC path访问该文件:)