gpt4 book ai didi

java - 使用 servlet,如何从数据库下载多个文件并将它们压缩以供客户端下载

转载 作者:搜寻专家 更新时间:2023-10-31 19:47:14 26 4
gpt4 key购买 nike

我有一个 jsp/servlet web 应用程序,客户端可以在其中通过下拉框选择“类(class)”和“作业”,然后单击一个按钮下载该类(class)下列出的数据库中的所有文件/赋值组合。 servlet 代码不能很好地工作,因为 zip 文件没有作为附件发送到浏览器。我确实有一次下载一个文件的工作代码,但是这段用于压缩文件的代码遇到了问题。数据库中的所有文件本身实际上都是 zip 文件,所以我试图压缩一堆 zip 文件。我不认为这需要区别对待它们而不是压缩任何其他格式的文件。谁能看到缺少的东西?这是我在处理下载的 servlet 中的 doGet 方法代码。大部分代码是在 stackoverflow 上找到的。请注意,FileSubmitted 对象是我的 DOA,其中包含数据库中每个文件的所有文件信息,包括 Blob 本身:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
List<FileSubmitted> fileList = new ArrayList<FileSubmitted>();
String course= request.getParameter("course");
String assignment = request.getParameter("assignment");

java.sql.PreparedStatement pstmt = null;
java.sql.Connection conn = null;
ResultSet rs;
String queryString;

try {
conn = ConnectionManager.getConnection();
conn.setAutoCommit(false);

queryString = "SELECT * FROM files WHERE courseID=\""+course+"\" AND assignmentID=\""+assignment+"\";";
pstmt = conn.prepareStatement(queryString);
rs = pstmt.executeQuery(queryString);
while(rs.next())
{
fileList.add(new FileSubmitted(rs.getString("username"),
rs.getString("courseID"),
rs.getString("assignmentID"),
rs.getString("fileName"),
rs.getString("mimeType"),
(Blob) rs.getBlob("contents")));
}


response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=\"allfiles.zip\"");

ZipOutputStream output = null;
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];

try {
output = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE));

for (FileSubmitted file : fileList)
{
InputStream input = null;
try {
input = new BufferedInputStream(file.getContents().getBinaryStream(), DEFAULT_BUFFER_SIZE);
output.putNextEntry(new ZipEntry(file.getFileName()));
for (int length = 0; (length = input.read(buffer)) > 0;)
{
output.write(buffer, 0, length);
}
}//try
catch (SQLException e) {e.printStackTrace();}
finally{}
output.closeEntry();
}//for
}//try
finally{}
}
catch (Exception e1) {e1.printStackTrace();}
finally{}
}

最佳答案

如果这对其他人有帮助,我找到了问题的答案。上面发布的代码实际上非常适合从数据库下载多个文件并创建一个 zip 文件供客户端下载。问题是我通过 ajax 调用 servlet,显然你不能通过 ajax 调用下载文件。所以我将我的 jsp 页面更改为通过提交表单来调用 servlet,然后下载就完美地传递到了浏览器。

关于java - 使用 servlet,如何从数据库下载多个文件并将它们压缩以供客户端下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15962172/

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