我花了一天时间来研究客户端如何从服务器数据库上传和下载文件。当服务器和客户端在同一台机器上运行时,我的代码工作正常,但当客户端在不同的机器和服务器上时,一切都搞砸了。这是我的学校项目,所以任何人都可以帮助我实现该计划应该做的事情。我在互联网上搜索和搜索,为了我自己的努力,我没有找到解决方案,我看到了一些,但他们是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:自动编号
FileName:文字
FileSize:OLE对象
答案 0 :(得分:0)
您没有通过rmi实现远程文件加载,您已实现了一个远程调用,它将数据库文件复制到(服务器的)本地文件系统。除非您的客户端可以访问服务器的文件系统,否则这不起作用。你需要实际通过rmi发送文件字节。