1

クライアントがサーバー データベースからファイルをアップロードおよびダウンロードする方法に 1 日を費やしています。私のコードは、サーバーとクライアントが同じマシン上で実行されている場合は正常に動作しますが、クライアントがサーバーだけでなく別のマシン上にある場合、すべてが台無しになります。これは学校のための私のプロジェクトなので、プログラムが行うべきことを実装する方法について誰かが私を助けることができます. インターネット全体を検索して検索しましたが、自分の努力で解決策を見つけることができませんでした。いくつか見ましたが、それらはサーブレットと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();

}

ダウンロードボタンのアクションリスナーは次のとおりです。

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 オブジェクト

4

1 に答える 1

0

rmiを介したリモートファイルロードを実装していません。データベースファイルを(サーバーの)ローカルファイルシステムにコピーするリモート呼び出しを実装しています。クライアントがサーバーのファイルシステムにアクセスできない限り、これは機能しません。実際にrmi 経由でファイル バイトを送信する必要があります。

于 2013-03-16T14:35:56.390 に答える