java实现从数据库下载文件_java – 使用servlet,如何从数据库下载多个文件并将其压缩以供客户端下载...

我有一个jsp / servlet web应用程序,客户端可以通过下拉框选择“课程”和“作业”,然后单击按钮下载该课程/作业组合下列出的数据库中的所有文件. servlet代码不能正常工作,因为zip文件没有作为附件发送到浏览器.我确实有一个工作代码一次下载一个文件,但是有些东西被这个代码卡在了压缩文件中.数据库中的所有文件实际上都是zip文件本身,所以我试图压缩一堆zip文件.我不认为这会要求他们的处理方式与压缩任何其他格式的文件不同.有谁能看到缺少的东西?这是我处理下载的servlet中的doGet方法代码.这些代码大部分都是在stackoverflow上找到的.请注意,FileSubmitted对象是我的DOA,包含数据库中每个文件的所有文件信息,包括Blob本身:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

List fileList = new ArrayList();

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{}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值