これはもともと別のスレッドのパート 2 でしたが、別の使用法から、パート 2 を別のトピックに分けることが提案されたので、ここで説明します。元スレはこちら (元スレ)
Jackcess を使用して、Access 2013 を使用して開くクライアントに転送する必要がある V2010 mdb ファイルを作成しています。Jackcess 自体は機能します。V2010 は、ファイルが FAR などのサードパーティ ソフトウェアによってクライアントに FTP 送信されたときに、Access 2013 が開くことができるファイルを作成します。ただし、サーブレットを介してこのファイルをクライアントにアップロードしようとすると (このプロジェクトの目標と同様)、クライアントの Access は「認識されないデータベース形式 "...ファイル名..." と表示されます。これは使用されるコードです。アップロード用コード自体は機能し、ファイルは転送され、保存されている場合はサイズがゼロではありませんが、Access で開くことができません。
コンテンツ タイプについては、vnd.msassess と octed-stream も試しましたが、同じ結果が得られませんでした。また、db を閉じてファイル名から FileInputStream を作成してみたり、例のように mydb.getFile() を呼び出して FileInputStream を作成しようとしたりしました。変わりはない。
response.setContentType("application/vnd.ms-access");
String fileName = "SomeFileName.mdb";
response.setHeader("Content-Disposition", "attachment; filename="+fileName);
Database mydb = generateMDBFile();
FileInputStream fis = new FileInputStream(mydb.getFile());
OutputStream os = response.getOutputStream();
byte[] buffer = new byte[1024];
try {
int byteRead = 0;
while ((byteRead = fis.read()) != -1) {
os.write(buffer, 0, byteRead);
}
os.flush();
} catch (Exception excp) {
excp.printStackTrace();
} finally {
os.close();
fis.close();
}
このコードによって mdb ファイルが破損するのはなぜですか? これは、サイズに関係なく毎回発生します (2 列/1 行の小さなファイルと、40 列と 80000 行の巨大なファイルを試しました)。
ありがとうございました!