gpt4 book ai didi

java - Access (.mdb) 文件在 servlet 写入客户端期间损坏

转载 作者:行者123 更新时间:2023-11-30 03:39:03 25 4
gpt4 key购买 nike

这原本是另一个线程的第 2 部分,但另一种用途建议我将第 2 部分分成它自己的主题,所以我们开始吧。原始线程在这里(Original Thread)

我正在使用 Jackcess 创建一个 V2010 mdb 文件,我需要将该文件传输到将使用 Access 2013 打开它的客户端。 Jackcess 本身可以工作 - V2010 创建一个文件,当该文件通过第三方软件(例如 FAR)通过 FTP 传输到客户端时,Access 2013 可以打开该文件。但是,当我尝试通过 servlet 将此文件上传到客户端时(正如该项目的目标),客户端上的 Access 显示“无法识别的数据库格式“...文件名...”。这是使用的代码用于上传。代码本身可以工作,文件已传输,如果保存,则具有非零大小 - 但 Access 无法打开它。

注意,对于内容类型,我还尝试了 vnd.msassess 和 octed-stream,但结果相同。另外,我尝试关闭数据库并从文件名创建 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 行的巨大文件)

谢谢!

最佳答案

您忘记填充缓冲区。使用

// ...
while ((byteRead = fis.read(buffer)) != -1) {
os.write(buffer, 0, byteRead);
}
// ...

关于java - Access (.mdb) 文件在 servlet 写入客户端期间损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27196153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com